ĐỀ TÀI: Thiết kế hệ vi xử lý nhúng trên nền tảng công
nghệ FPGA
Tác giả: Dương Bá Dũng. Ra đa K42
Hoàng Thị Yến. ĐTYS K44
Học viện Kỹ thuật Quân sự
1
Mở đầu
Ngày nay, chúng ta đang sống trong kỷ nguyên của khoa học và công nghệ ,càng
ngày càng có những đột phá về khoa học và công nghệ mới. Đất nước ta đang trong thời kỳ
đổi mới, công nghiệp hoá, hiện đại hoá, với xu thế hội nhập kinh tế quốc tế.
Ngành Điện tử - Viễn Thông Việt Nam, một trong những ngành có vai trò quan
trọng trong kết cấu hạ tầng cơ sở của nền kinh tế quốc dân cũng đang có sự đóng góp lớn
lao cho sự lớn mạnh của nền kinh tế, ổn định chính trị và an ninh quốc phòng nước nhà.
Công nghệ Điện tử nói chung và công nghệ FPGA nói riêng ngày càng lớn mạnh ở Việt
Nam chúng ta. Hầu hết những thiết bị phức tạp đều giải quyết nhiệm vụ trên cơ sở Hệ vi
xử lý. Bên cạnh đó,tính linh động cao trong quá trình thiết kế cho phép FPGA giải quyết
những bài toán phức tạp mà trước kia chỉ thực hiện nhờ phần mềm máy tính. Ngoài ra, nhờ
mật độ cổng logic cao, FPGA được ứng dụng cho những bài toán đòi hỏi khối lượng tính
toán lớn. Những ứng dụng trong thực tế của FPGA rất rộng rãi, bao gồm: Các hệ thống
hàng không, vũ trụ, quốc phòng, tiền thiết kế mẫu ASIC (ASIC prototyping), các hệ thống
điều khiển trực quan, phân tích nhận dạng ảnh, nhận dạng tiếng nói, mật mã học, mô hình
phần cứng máy tính... Đặc biệt, với khả năng tái lập trình, người sử dụng có thể thay đổi lại
thiết kế của mình chỉ trong vài giờ…
Nhờ những đặc điểm mạnh mẽ và ứng dụng thực tiễn của FPGA cùng với vai trò
giải quyết bài toán của Vi xử lý,chúng em đã chọn đề tài “Thiết kế hệ Vi Xử Lý nhúng
chuyên năng trên nền tảng công nghệ FPGA”. Đề tài được viết bằng ngôn ngữ VHDL
Chúng em xin chân thành cảm ơn thầy giáo Đỗ Xuân Tiến,thầy giáo Trịnh Quang
Kiên đã tận tình hướng dẫn, giúp đỡ chúng em để có thể hoàn thành đề tài.
Trong thời gian ngắn,đề tài nghiên cứu chưa được sâu,kính mong các thầy cô cùng
các bạn góp ý kiến để Đề tài tiếp tục hoàn thiện và phát triển.
2
I. Giới thiệu chung về Hệ Vi Xử Lý.
1. Lịch sử phát triển của chip Vi xử lý.
Những vi mạch tích hợp đầu tiênVới những tiến bộ của công nghệ, vi xử lý đã ra
đời và phát triển theo thời gian. Ba hãng sản xuất chíp Intel, Texas Instruments (TI) và
Garrett AiResearch đã cho ra đời ba bộ vi xử lý cùng một thời điểm với các tên gọi lần lượt
là Intel 4004, TMS 1000 và Central Air Data Computer. Đây là ba dự án đầu tiên cho ra
đời các bộ vi xử lý hoàn chỉnh.
Năm 1968, hãng Garrett đã được mời chế tạo một máy tính số để đua tài với các hệ
thống cơ điện tử và sau đó nó được phát triển để làm bộ điều khiển chính của máy bay
chiến đấu Tomcat F-14 của Hải quân Mỹ. Sản phẩm này đã hoàn thiện vào năm 1970 và nó
sử dụng một chíp được xây dựng bằng công nghệ MOS đóng vai trò là lõi của CPU. Sản
phẩm này có kích thước nhỏ hơn và hoạt động tin cậy hơn nhiều lần so với các hệ thống cơ
điện tử và nó được dùng cho những mô hình máy bay Tomcat đầu tiên. Tuy nhiên, hệ
thống này tân tiến đến mức Hải quân Mỹ đã từ chối việc cấp phép công bố sản phẩm cho
đến tận năm 1997.TI đã phát triển bộ vi xử lý 4-bits TMS 1000 và tập trung vào các ứng
dụng nhúng lập trình trước. Sau đó, TI đã tiếp tục công bố một phiên bản khác gọi là
TMS1802NC vào ngày 17 tháng 9 năm 1971. TMS1802NC tích hợp trên nó một bộ tính
toán nhằm hỗ trợ khả năng xử lý toán học của vi xử lý. Tiếp đến, ngày 15 tháng 11 năm
1971, Intel đã công bố vi xử lý 4-bits Intel 4004 được phát triển bởi Federico Faggin.
3
2. Tổng quan về hệ vi xử lí.
Tổ chức chung của hệ vi xử lí được thể hiện trong hình vẽ 1.1.
Hình 1.1: Kiến trúc chung hệ vi xử lí.
Hệ vi xử lí gồm các thành phần chính sau:
CPU đơn vị xử lí trung tâm là bộ nào của hệ vi xử lí. Nhiệm vụ của CPU là
điều khiển tất cẩ các thành phần có trong hệ vi xử lí, thực hiện mọi thao tác có liên
quan tới tính toán, xử lí, gia công, biến đổi tín hiệu nhị phân trong hệ dưới sự điều
khiển của chương trình cài đặt trong bộ nhớ trung tâm của hệ vi xử lí.
Memory là bộ nhớ trung tâm của hệ vi xử lí gồm hai thành phần. Thành
phần thứ nhất là bộ nhớ cố định ROM dùng để chứa nội dung chương trình điều
hành hoạt động của hệ vi xử lí. Nó còn được gọi là chương trình monitor. ROM
còn được sử dụng để chứa các bảng biểu và các tham số của hệ thống. Chương
trình trong ROM phải được chuẩn bị trước khi cho hệ thống hoạt động. Thành
phần thứ hai của bộ nhớ trung tâm là bộ nhớ đọc/ghi RAM được dùng làm môi
trường lưu trữ kết quả trung gian, kết quả cuối của của xử lí thông tin. Nó cũng
được sử dụng để làm vùng đệm dữ liệu cho các thao tác thu phát chuyển đổi số
liệu.
I/O là cổng vào ra, có nhiệm vụ giao tiếp giữa hệ vi xử lí và thế giới bên
ngoài. Thực hiện truyền dữ liệu số nhị phân đã được xử lí từ bên trong hệ thống ra
4
bên ngoài và thực hiện truyền ngược lại tín hiệu nhị phân từ bên ngoài vào bên
trong hệ vi xử lí để thực hiện tín toán và xử lí tín hiệu. Có hai loại cổng vào ra:
cổng vào ta nối tiếp và cổng vào ra song song. Ngoài ra trong hệ vi xử lí còn có
bàn điều khiển, hiển thị thực hiện điều khiển hệ thống và hiển thị kết quả điều
khiển và trạng thái hoạt động của hệ vi xử lí. Các bộ biến đổi tương tự - số (ADC)
và bộ biến đổi số - tương tự (DAC) thực hiện chuyển đổi tín hiệu tương tự sang tín
hiệu số nhị phân và ngược lai
Hệ thống trong hệ vi xử thực hiện kết nối liên lạc các bộ phận trong hệ
thống với nhau. Hệ thống gồm 3 thành phần chính:
Thành phần thứ nhất là địa chỉ là thành phần một chiều bộ vi xử lí dùng nay
để điều khiển các thành phần có trong bằng cách gán cho mỗi thành phần một địa
chỉ xác định.
Thành phần thứ hai là kênh dữ liệu. Đây là kênh dữ liệu hai chiều thực hiện
trao đổi thông tin giữa đơn vị xử lí trung tâm và các thành phần có trong hệ thống.
Thành phần thứ ba là kênh điều khiển. Là tập hợp các tín hiệu điều khiển để
tạo liên lạc giữa đơn vị xử lí trung tâm và các thành phần có trong hệ nhằm đồng
bộ hóa mọi chế độ và mọi thao tác của hệ thống.
Hệ vi xử lý được sử dụng rộng rãi trong cuộc sống, với các ứng dụng như:
Xử lý ảnh, xử lý tín hiệu, thông tin di động, thiết bị y tế... Tính chuyên dụng của
các ứng dụng được thể hiện một cách rõ nét khi mà các hệ vi xử lý ra đời phục vụ
một lớp bài toán ứng dụng vào từng lĩnh vực cụ thể. Các hệ vi xử lý chuyên dụng
tuy không mạnh nhưng lại được bán và sử dụng ở nhiều nơi: Các bo mạch tạo
nhạc, máy thu hình điện thoại di động, lò vi ba, mạch điện tử trong xe con…
Trong phạm vi nghiên cứu của đề tài chúng em thực hiện thiết kế một hệ vi
xử lý nhỏ gọn, với một tập lệnh chuyên năng đã được thu gọn đơn giản, không
hoàn toàn đầy đủ các lệnh như các hệ vi xử lý lớn.
5
II. Xây dựng hệ vi xử lí cần thiết kế .
1. Thiết kết tập lệnh.
a. Giới thiệu tập lệnh.
Hoạt động của CPU được xác định bởi các lệnh mà nó thực hiện. Các lệnh này
giống như lệnh cho máy hoạt động…Tập hợp các lệnh khác nhau mà CPU có thể thực hiện
được gọi là tập lệnh của CPU. Từ tập lệnh định nghĩa được phần dữ liệu và mọi phần khác
trong bộ xử lí nên một việc cần thiết đầu tiên là nghiên cứu tập lệnh của nó.
Bảng 1.1 Tóm tắt tập lệnh chuyên năng của CPU cần thiết kế. Có 28 lệnh được
nhóm lại làm 4 nhóm: các lệnh toán học và lệnh logic. Các lệnh chuyển dữ liệu và các lệnh
bit. Xây dựng tập lệnh này dựa trên tập lệnh của các loại vi xử lí và vi điều khiển thông
dụng hiện nay ví dụ: 89C51, Atmel AVR…
Mã Opcode Function Chú thích
1 nop 0000 0000 Nop 0000 0000 0000 0000
2 halt 1111 1111 Halt 1111 1111 0000 0000
3 MOVRd 1001 - RF[rn] <= mem[direct] 1001 rrrr dddd rrrr
4 MOVMd 1010 - mem[direct] <= RF[rn] 1010 dddd dddd rrrr
5 MOVM 0000 0001 mem[RF[rn]] <= RF[rm] 0000 0001 dddd rrrr
6 MOVRFi 1011 - RF[rn] <= imm 1011 kkkk dddd kkkk
7 ADD 0000 0010 RF[rn] <= RF[rn] + RF[rm] 0000 0010 dddd rrrr
8 ADDi 1100 - RF[rn] <= RF[rn] +imm 1100 kkkk dddd kkkk
9 SUB 0000 0011 RF[rn] <= RF[rn] - RF[rm] 0000 0011 dddd rrrr
10 SUBi 1101 - RF[rn] <= RF[rn] – imm 1101 kkkk dddd kkkk
11 JZ 1110 - jz if R[rn] = 0 1110 dddd dddd rrrr
12 lcall 1011 - 1111 dddd dddd dddd
13 Jmp 1000 - 1000 dddd dddd dddd
14 SLL 0001 0000 RF[rn] <= RF[rn] sll RF[rm] 0001 0000 dddd rrrr
15 SLA 0001 0001 RF[rn] <= RF[rn] sla RF[rm] 0001 0001 dddd rrrr
16 SRL 0001 0010 RF[rn] <= RF[rn] srl RF[rm] 0001 0010 dddd rrrr
17 SRA 0001 0011 RF[rn] <= RF[rn] sra RF[rm] 0001 0011 dddd rrrr
18 NOTx 0010 0000 RF[rn] <= not RF[rm] 0010 0000 dddd rrrr
19 ANDx 0010 0001 RF[rn] <= RF[rn] and RF[rm] 0010 0001 dddd rrrr
20 NAND 0010 0010 RF[rn] <= RF[rn]nand RF[rm] 0010 0010 dddd 0000
21 OR 0010 0011 RF[rn] <= RF[rn] or RF[rm] 0010 0011 dddd rrrr
22 NOR 0011 0001 RF[rn] <= RF[rn] nor RF[rm] 0011 0000 dddd rrrr
23 XOR 0011 0010 RF[rn] <= RF[rn] xor RF[rm] 0011 0001 dddd rrrr
24 XNOR 0011 0011 RF[rn] <= RF[rn] nxor RF[rm] 0011 0011 dddd rrrr
25 SETB 0111 0000 I/O(A, b) ← 1 0111 0000 aaaa arrr
26 CLRB 0111 0001 I/O(A, b) ← 0 0111 0001 aaaa arrr
27 IN 0111 0010 Rd ← I/O(A) 0111 0010 dddd iiii
6
28 OUT 0111 0011 I/O(A) ← Rr 0111 0011 uuuu rrrr
a. Các phương pháp định địa chỉ.
CPU có thể truy nhập dữ liệu theo nhiều cách khác nhau. Dữ liệu có thể ở
trong một thanh ghi, ở trong bộ nhớ hoặc được cho dưới dạng địa chỉ tức thời.
Cách CPU truy nhập dữ liệu được gọi là chế độ định địa chỉ. Trong tập lệnh trên
chúng ta đã xây dựng có 4 chế độ định địa chỉ cơ bản:
Chế độ định địa chỉ tức thời: Toán hạng nguồn là một hằng số.
Ví dụ: MOVRFi R1,4 ; // nhập giá trị 4 vào thanh ghi R1.
Chế độ định địa chỉ thanh ghi: Sử dụng thanh ghi để lưu dữ liệu cần thao tác.
Ví dụ: ADD R1,R2 ; // cộng giá trị thanh ghi R1 với thanh ghi R2 và
lưu kết quả vào thanh ghi R1.
Chế độ định địa chỉ trực tiếp: Định địa chỉ thanh trực tiếp có thể truy nhập
toàn bộ không gian bộ nhớ RAM của hệ vi xử lý.
Ví dụ: MOVRd R1, 7 ;// Dịch chuyển dữ liệu từ ô nhớ địa chỉ là 7
trong RAM vào thanh ghi R1.
Chế độ định địa chỉ gián tiếp thanh ghi: Thanh ghi được sử dụng để trỏ đến
dữ liệu có trong ô nhớ.
Ví dụ: MOVM R1,R2; // Dịch chuyển dữ liệu từ thanh ghi R2 vào ô
nhớ có địa chỉ nằm trong R1.
b. Cấu trúc lệnh.
Trong thực tế có rất nhiều họ vi xử lí mỗi họ lại có một cấu trúc tập lệnh khác nhau.
Để tiện cho việc thiết kế hệ vi xử lí, thực hiện mã hóa và giải mã lệnh một cách đơn giản ta
lựa cấu trúc lệnh có độ dài cố định 16 bit.
Cho các lệnh yêu cầu hai thanh ghi. Ta lựa chọn d là địa chỉ thanh ghi đích còn r là
đia chỉ thanh nghi nguồn. 4 bit có thể được đánh địa chỉ cho toàn bộ 16 thanh ghi (
). Các lệnh cho cấu trúc này bao gồm ADD, SUB và AND…Đối với nhóm lệnh này thì 8
bít đầu bao gồm opcode(mã hoạt động) và function(mã chức năng) để xác định chức năng
của lệnh và 8 bit sau đánh địa chỉ cho hai thanh ghi nguồn(rrrr) và đích(dddd) trong tập
thanh ghi nháp.
7
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
o o o o f f f f d d d d r r r r
Đối với các lệnh yêu cầu một thanh ghi, d là thanh ghi nguồn hoăc r là thanh ghi
đích.
Đối với các lệnh có chứa một toán tử và giá trị trực tiếp trong câu lệnh, k là giá trị
trực tiếp (cố định) và d là địa chỉ thanh ghi đích. Cấu trúc lệnh này áp dụng cho các lệnh
SUBI,ADDI,MOVI.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
o o o o k k k k d d d d k k k k
Nhóm lệnh này sử dụng bốn bít đầu opcode (mã hoạt động) xác định chức năng của
mỗi lệnh cũng được sử dụng phân biệt với các lệnh khác. Tám bít (kkkkkkk)từ (11…7) và
(3…0) chứa giá trị trực tiếp trong câu lệnh. Bốn bít (dddd) từ (7…4) xác định địa chỉ thanh
ghi đích trong tập thanh ghi nháp(tập thanh ghi đa năng RF) .
Đối với lệnh rẽ nhánh: lệnh jmp là lệnh nhảy không điều kiện thực hiện nhảy tới
một địa chỉ lệnh trong bộ nhớ lệnh…
Mã máy của từng lệnh được thể hiện trong bảng 1.1 .
8
2. Tổ chức hệ vi xử lí.
a. Mô tả chân.
Hình 2.1 Mô tả chân của vi xử lí.
Hình 2.1 mô tả cấu hình chân cho bộ vi xử lí. Bộ vi xử lí có các cổng vào và cổng ra
được quy định rõ. Mỗi cổng có 8 chân tương ưng với 8 bit. Tín hiệu clk sẽ được đưa trực
tiếp vào trong hệ vi xử lí. Reset sẽ được đặt ở mức thấp.khi Reset được xác lập thì hệ vi xử
lí ở trạng thái mặc định khi chưa có xung clk.
9
a. Kiến trúc tổng quát.
Hình 2.1Kiến trúc tổng quát của CPU.
Hình 2.1 chỉ ra sơ đồ khối tổng quát của thiết kế, mỗi khối được đưa ra là một
modul cần được thiết kế. Trên sơ đồ có 13 khối, trong đó có những khối đơn giản (RF)và
những khối phức tạp (CU, ALU). Chúng ta phải hiểu các modul đó trước khi bắt tay vào
thiết kế từng modul cụ thể.
Thực hiện kết nối giữa các khối lại với nhau bằng các đường dữ liệu. Có hai loại
đường dữ liệu cơ bản là trực tiếp và chung. trực tiếp là các kết nối trực tiếp giữa hai
khối với nhau. Còn chung kết nối nhiều khối lại với nhau.
10
Chúng ta có thể phân chia hệ thống ra làm các đơn vị và các khối. Có hai đơn vị cơ
bản là đơn vị tham chiếu, và đơn vị thực hiện.
Đơn vị tham chiếu: Gồm có bộ đếm chương trình (PC), bộ nhớ chương trình
(ROM). Thanh ghi lệnh (IR).
Khối thứ nhất của đơn vị tham chiếu là bộ đếm chương trình (PC). PC chứa địa chỉ
của lệnh được thực hiện. Nó tham chiếu tới bộ nhớ chương trình (ROM) tới vị trí của lệnh.
Lệnh từ ROM sẽ được chốt vào trong thanh ghi lệnh (IR). Đơn vị điều khiển sẽ mang nội
dung của (IR) và giải mã nó. Đơn vị điều khiển xác lập tín hiệu điều khiển tương ứng thực
hiện lệnh. Tất cả các khối được kết nối với nhau bằng trực tiếp.
Đơn vị thực hiện trong hệ thực hiện phần lớn các lệnh. Bình thường thực hiện một
lệnh. Hai toán tử là đầu ra của tập thanh ghi lệnh tới ALU. ALU khi ấy sử dụng toán tử và
gửi kết quả tới dữ liệu. Nội dung của dữ liệu được lưu trở lại tập thanh ghi lệnh.
Trong thiết kế không thực xử lí đường ống đường ống mà các lệnh được thực hiện
nối tiếp nhau. Một lệnh được thực hiện xong thì lệnh kế tiếp mới được thực hiện. Chương
trình và dữ liệu được lưu vào không gian nhớ khác nhau. Chương trình được lưu vào bộ
nhớ cố định ROM và dữ liệu được lưu vào bộ nhớ RAM. Tổ chức như vậy sẽ làm đơn giản
quá trình tham chiếu lệnh và xuất nhập dữ liệu từ RAM. Bình thường RAM có giá trị ban
đầu khi nguồn được bật lên. Trong FPGA, RAM có thể có giá trị ban đầu nên nó có thể
hoạt động giống như là ROM.
Tất cả các khối vào ra đều có một số thanh ghi điều khiển. Dữ liệu được nhận và
gửi tới nó thông qua dữ liệu.( Bổ xung thanh ghi điều khiển).
b. Thanh ghi truyền.
Trong thiết kế có chứa một số thanh ghi: Thanh ghi lệnh (IR), bộ đếm chương trình
(PC), các thanh ghi mục đích chung, thanh địa chỉ bộ nhớ, thanh ghi dữ liệu bộ nhớ, và các
thanh ghi điều khiển vào ra. Ta có thể tìm thấy nó bên trong các khối trong sơ đồ. Hệ thống
làm việc bởi truyền dữ liệu giữa các thanh ghi với nhau(thanh ghi truyền). Dữ liệu truyền
đi có thể được thay đổi hoặc không được thay đổi trước khi tới thanh ghi tiếp theo, nếu dữ
liệu được thay đổi là do nó truyền qua mạch tổ hợp giữa hai thanh ghi. Thiết kế thi hành
một chuỗi dài nối tiếp các thanh ghi truyền thực hiện chức năng của một vi xử lí. Hình 2.2
chỉ ra nguyên lí thanh ghi truyền. Nó có thể được nhìn thấy trong hình giữa các thanh ghi
truyền là các mạch logic tổ hợp một lớp hoặc nhiều lớp biến đổi tín hiệu
11
Ví dụ: Bộ nhớ (RAM, ROM) giống như một loại mạch tổ hợp. Bộ đếm chương
trình thông qua bộ nhớ chương trình (ROM) tới thanh ghi lệnh. Thanh ghi lệnh sẽ nhận
lệnh từ bộ nhớ chương trình (ROM) được chỉ bởi PC.
Vì vậy quá trình thiết kế là thiết kế các thanh ghi cùng với mạch tổ hợp và quan hệ
giữa chúng. Đây được gọi là phần dữ liệu (datapath) của hệ thống. Tín hiệu điều khiển
được sử dụng xác định truyền được dữ liêu như thế nào từ thanh ghi nào tới thanh ghi nào
và tại thời điểm nào. Tín hiệu điều khiển được xác lâp bởi đơn vị điều khiển.
c. Đăc tính tín hiệu điều khiển.
Tín hiệu điều khiển được sử dụng để điều khiển phần dữ liệu (datapath). Chúng ta
sẽ tìm hiểu đặc tính của tín hiệu điều khiển trước khi thực hiện các công việc tiếp theo.
Thứ nhất một tín hiệu điều khiển có chiều dài nhỏ nhất một xung nhịp clk. Nó thường
được đặt lên sau một thời gian ngắn sau sườn lên của xung nhịp clk. Phần dữ liệu chứa một
và thanh ghi và các mạch tổ hợp giữa chúng vì vậy chúng ta có hai loại tín hiệu điều khiển
cơ bản: loại thứ nhất là điều khiển các mạch logic tổ hợp và loại thứ hai là điều khiển các
thanh ghi.
Khi một mạch logic tổ hợp bắt gặp một tín hiệu điều khiển, nó sẽ hoạt động hướng
tín hiệu qua ngay lập tức. Ví dụ ADD là tín hiệu điều khiển thực thi phép toán cộng, khi có
tín hiệu ADD ngay lập tức phép toán cộng được thực thi.ngay lập tức. Thời gian trễ của kết
12
quả đầu ra so với tín hiệu đầu vào là thời gia lan truyền tín hiệu qua mạch tổ hợp. Mạch
logic tổ hợp ở đây có thể là một đơn vị thực hiện chức năng giống như là bộ cộng, bộ
dịch…
Một tín hiệu điều khiển thanh ghi yêu cầu sườn lên của xung clk để điều khiển. Ví
dụ tín hiệu WR_REG có nhiệm vụ chốt dữ liệu vào thanh ghi đích của tập các thanh ghi
khi bắt gặp sườn lên của xung clk. Từ đó tín hiệu điều khiển được xác lâp tại một thời
điểm sau một thời gian ngắn sườn lên của xung clk. Hoạt động xảy ra ở phía cuối tín hiệu
điều khiển tại đây nó bắt gặp sường lên của xung clk. Tín hiệu điều khiển là tín hiệu cho
phép của các thanh ghi hoặc tín hiệu tăng giảm cho bộ đếm..
Hình 2. Giản đồ thời gian tín hiệu điều khiển.
Hình trên giải thích sinh động khái niệm. Cả hai tín hiệu điều khiển ADD và
WR_REG được xác lập và không được xác lập sau một sườn lên xung clock. Tín hiệu
ADD đưa ra tác động ngay lập tức sau khi nó được xác lập bởi kết quả đầu ra của bộ cộng.
Kết quả có được sau một thời gian trễ phụ thuộc vào tốc độ của bộ cộng. Tín hiệu
WR_REG chốt kết quả vào trong thanh ghi tại thời điểm kết thúc của tín hiệu khi bắt gặp
sườn lên xung clock. Kết quả thanh ghi thay đổi giá trị sau sườn lên xung clock một thời
gian ngắn.
13
3. Thiết kế phần dữ liệu(datapath).
a. Tổng quát .
Trong thiết kế hệ vi xử lí chúng ta cần thiết kế hai phần quan trọng: thiết kế phần dữ
liệu và thiết kế phần điều khiển. Trong chương này chúng ta thảo luận chi tiết thiết kế phần
dữ liệu, chương tiếp theo ta thiết kế phần điều khiển. Trong sơ đồ khối hình 2.1 tất cả các
khối ngoại trừ khối điều khiển còn lại các khối khác là thuộc về phần dữ liệu. Các khối này
được thể liệt kê trong hìn phía dưới đây.Ta thiết kế từng khối trong chương này.
Các khối trong phần dữ liệu.
b. Bộ đếm chương trình.
Bộ đếm chương trình sẽ được tăng lên sau khi lệnh trước nó được thực hiện xong,
trong thiết kế một lệnh sẽ được thực hiện trong 4 xung nhịp clock nên cứ sau 4 xung nhịp
clock thì thanh ghi bộ đếm chương trình được tăng lên một đơn vị. Trong một số trường
hợp gặp lệnh nhảy có điều kiện hoặc không có điều kiện giá trị thanh ghi bộ đếm chương
trình được nhận giá trị mới là địa chỉ của lệnh cần nhảy tới.
14
Hình 3.1 cấu trúc của bộ đếm chương trình.
Hình 3.1 Chỉ ra cấu trúc của khối bộ đếm chương trình (PC). Pc_out là đầu ra của
khối PC là địa chỉ của lệnh trong ROM. Pc_out có độ rộng 8 bit vì vậy PC có thể định địa
chỉ cho 256 lệnh. Pc_out được kết nối trực tiếp tới ROM. Pc_in là giá trị địa chỉ của lệnh
mà chương trình cần nhảy tới, tương ứng nó có tín hiệu điều khiển En_in cho phép thanh
ghi bộ đếm nhận giá trị của Pc_in. Bộ đếm chương trình còn có các tín hiệu điều khiển
Pc_en là tín hiệu cho phép thanh ghi bộ đếm tăng lên một đơn vị. Tín hiệu Reset khi được
kích hoạt mức 0 thì đưa giá trị của thanh ghi bộ đếm chương trình về 0.
c. Rom .
15
Hình 3.3 Khối bộ nhớ chương trình ROM.
ROM là bộ nhớ chứa chương trình điều khiển hoạt động của hệ vi xử lí. Một
chương là một mạch tổ hợp của một vài lệnh thực hiện một chức năng nào đó. Hình 3.2 tổ
chức của một bộ nhớ chương trình. Tất cả các lệnh có độ dài cố định 16 bit. Kích thước
của một từ ROM là 16 bit. Tổng kích thước của ROM là 256 bytes. Điều này có nghĩa là
ROM có thể lưu giữ được 256 lệnh tương ứng với 256 địa chỉ của ROM.
Bộ đếm chương trình cung cấp 8 bít địa chỉ thông qua trực tiếp tới ROM. Lệnh đầu
ra từ ROM sẽ gửi tới thanh ghi lệnh. Không có xung clock nào cần cho ROM. Nó có thể là
ảnh chiếu giống như một mạch logic tổ hợp. Tín hiệu đầu ra sẽ được thay đổi sau một thời
gian ngắn sau khi đầu vào thay đổi.
d. Thanh ghi lệnh(IR)
Thanh ghi lệnh (IR) được sử dụng để lưu giữ lệnh. Lệnh được nhận từ bộ nhớ
chương trình ROM thông qua 16 bit. IR sẽ chốt lệnh mới nếu tín hiệu EN được đặt lên.
Thanh ghi lệnh kết nối trực tiếp với đơn vị điều khiển để thực hiện giải mã. Địa chỉ của
thanh ghi đích và thanh ghi nguồn được gửi trược tiếp tới tập các thanh ghi đa năng.
16