Bài giảng Thiết kế hệ thống nhúng - Chương 2: Cấu trúc phần cứng hệ thống nhúng - Bài 2: Bộ xử lý chức năng đơn chuyên
Tổng quan
• Giới thiệu
• Mạch tổ hợp
• Mạch tuần tự
• Thiết kế bộ xử lý chức năng đơn
• Thiết kế bộ xử lý chức năng đơn chuyên dụng thời
gian thực3
Giới thiệu
* Các loại vi điều khiển trên thị trường hiện nay:
– Freescale 68HC11 (8-bit)
– Intel 8051
– STMicroelectronics STM8S (8-bit), ST10 (16-bit) và STM32 (32-bit)
– Atmel AVR (8-bit), AVR32 (32-bit), và AT91SAM (32-bit)
– Freescale ColdFire (32-bit) và S08 (8-bit)
– Hitachi H8 (8-bit), Hitachi SuperH (32-bit)
– MIPS (32-bit PIC32)
– PIC (8-bit PIC16, PIC18, 16-bit dsPIC33 / PIC24)
– PowerPC ISE
– PSoC (Programmable System-on-Chip)
– Texas Instruments Microcontrollers MSP430 (16-bit), C2000 (32-bit), và Stellaris (32-bit)
– Toshiba TLCS-870 (8-bit/16-bit)
– Zilog eZ8 (16-bit), eZ80 (8-bit)
– Philips Semiconductors LPC2000, LPC900, LPC700

Trang 1

Trang 2

Trang 3

Trang 4

Trang 5

Trang 6

Trang 7

Trang 8

Trang 9

Trang 10
Tải về để xem bản đầy đủ
Tóm tắt nội dung tài liệu: Bài giảng Thiết kế hệ thống nhúng - Chương 2: Cấu trúc phần cứng hệ thống nhúng - Bài 2: Bộ xử lý chức năng đơn chuyên
kiến trúc
27
Giới thiệu
5.Vi điều khiển ARM.
Ngôn ngữ lập trình chính cho ARM hiện nay là ngôn ngữ C. Các trình biên dịch cho ARM thƣờng
đƣợc dùng:
– Keil ARM.
– IAR.
– HTPICC for ARM.
– ImageCraft ICCV7 for ARM
28
Giới thiệu
6. FPGA và các ứng dụng nhúng
Hệ thống nhúng (embedded system) bắt đầu từ các họ Vi điều khiển 8051 rồi đến PIC, AVR và cao
hơn nữa là họ ARM, AVR32 hay PSoC. Với FPGA tiếp cận hoàn toàn khác.
Vậy bao nhiêu công sức, kinh nghiệm về vi điều khiển và cả những công trình nghiên cứu bị bỏ rơi?
thực ra FPGA chỉ phát huy sức mạnh của nó khi đƣợc ghép nối với vi điều khiển. Đó cũng chính là
mục đích và tƣ tƣởng thiết kế của co-design.
29
Giới thiệu
6. FPGA và các ứng dụng nhúng
Co-design kết hợp năng lực về phần cứng của FPGA với ƣu thế xử lý phần mềm của Vi điều khiển
để tạo nên một hệ thống đầy sức mạnh.
Ví dụ : Muốn thiết kế một ứng dụng đo nhiệt độ phòng với cảm biến nhiệt có giao tiếp I2C.
Nếu chỉ dùng MCU thông thƣờng không có giao tiếp I2C thì sẽ gặp rất nhiều khó khăn (Phải lập trình
ngắt, bắt sƣờn, mức của xung,...).
Còn nếu chỉ sử dụng FPGA trong ứng dụng này cũng không ổn vì lúc đó bạn sẽ gặp khó khăn nhất
định trong các tính toán số học.
Ví dụ cảm biến đo nhiệt độ bằng đơn vị độ F, trong khi ta muốn hiển thị độ C, mà muốn thực hiện
các phép toán cộng trừ nhân chia để chuyển đổi độ F với độ C bằng FPGA là không hề đơn giản.
Trong trƣờng hợp này ta thiết kế theo phƣơng thức co-design. FPGA phụ trách giao tiếp với cảm
biến I2C và trả về các số liệu thô để MCU thực hiện các tính toán số học.
30
Transistor CMOS trên silicon
• Transistor
– Là phần điện tử cơ bản trên mạch số
– Hoạt động nhƣ một chuyển mạch on/off
– Điện áp ở cực “cổng” điều khiển dòng giữa cực nguồn
và cực máng
source
– Đừng nhầm lẫn “cổng” ở đây với cổng logic gate Conducts
if gate=1
1 drain
gate
IC package IC oxide
source channel drain
Silicon substrate
31
Thực hiện transistor CMOS
• CMOS - Complementary source source
Metal Oxide Semiconductor gate Conducts gate Conducts
if gate=1 if gate=0
• Chúng ta quan tâm đến mức drain drain
pMOS
logic nMOS
– Điển hình 0 là 0V, 1 là 5V
• Hai kiểu CMOS cơ bản 1 1 1
x y x
– nMOS dẫn nếu “cổng” =1 x F = x'
F = (xy)' y
– pMOS dẫn nếu “cổng” =0 x F = (x+y)'
– Vì thế gọi là “complementary” 0 y x y
0 0
• Các cổng cơ bản inverter NAND gate NOR gate
– Đảo, NAND, NOR
32
Các cổng logic cơ bản
x F x F x x y F x x y F x x y F
F F F
0 0 y 0 0 0 y 0 0 0 y 0 0 0
1 1 0 1 0 0 1 1 0 1 1
1 0 0 1 0 1 1 0 1
F = x F = x y F = x + y F = x y
1 1 1 1 1 1 1 1 0
Driver AND OR XOR
x F x F x x y F x x y F x x y F
F F F
0 1 y 0 0 1 y 0 0 1 y 0 0 1
1 0 0 1 1 0 1 0 0 1 0
F = x’ F = (x y)’ 1 0 1 F = (x+y)’ 1 0 0 F = x y 1 0 0
Inverter NAND 1 1 0 NOR 1 1 0 XNOR 1 1 1
33
Thiết kế logic tổ hợp
A) Mô tả vấn đề B) Bảng chân lý C) Phƣơng trình đầu ra
y là 1 nếu a là 1, hoặc b và c là 1. z là 1 Inputs Outputs y = a'bc + ab'c' + ab'c + abc' + abc
nếu b hoặc c là 1, nhƣng không phải cả a b c y z
hai, hoặc nếu tất cả là 1. 0 0 0 0 0
0 0 1 0 1 z = a'b'c + a'bc' + ab'c + abc' + abc
0 1 0 0 1
0 1 1 1 0
1 0 0 1 0
1 0 1 1 1
D) Phƣơng trình đầu ra tối thiểu 1 1 0 1 1
1 1 1 1 1
y bc E) Mạch logic
a 00 01 11 10
0 0 0 1 0
a y
1 1 1 1 1 b
c
y = a + bc
z
bc
a 00 01 11 10
0 0 1 0 1
z
1 0 1 1 1
z = ab + b’c + bc’
34
Các phần tử mạch tổ hợp
A B
I(log n -1) I0 A B A B
I(m-1) I1 I0 n
n n n n
n
n bit,
log n x n n-bit n-bit
S0 n-bit, m x 1 m function S0
Decoder Adder Comparator
Multiplexor ALU
n
S(log m) n n S(log m)
O(n-1) O1 O0 carry sum less equal greater
O O
O = O0 =1 nếu I=0..00 sum = A+B Less = 1 nếu A<B O = A op B
I0 nếu S=0..00 O1 =1 nếu I=0..01 (n bit đầu) equal =1 nếu A=B op đƣợc xác định bởi S.
I1 nếu S=0..01 carry = bit thứ (n+1) của greater=1 nếu A>B
O(n-1) =1 nếu I=1..11 A+B
I(m-1) nếu S=1..11
Với đầu vào enable e Với đầu vào Carry-in Có thể có các đầu ra
tất cả các bit đầu ra là 0 Ci trạng thái.
nếu e=0
sum = A + B + Ci
35
Các phần tử mạch tuần tự
I
n
load
n-bit shift n-bit n-bit
Register Shift register Counter
clear I Q
n n
Q Q
Q = Q = lsb Q =
0 nếu clear=1, - Nội dung đƣợc dịch 0 nếu clear=1,
I nếu load=1 and clock=1, - I đƣợc lƣu trong msb Q(prev)+1 nếu count=1 và clock=1.
Q(previous) nếu khác.
36
Thiết kế mạch tuần tự
A) Mô tả vấn đề C) Mô hình thực hiện D) Bảng trạng thái (Moore-type)
Giả sử ta muốn xây dựng 1 bộ chia
x
xung clock. Đầu ra có tín hiệu “1” a Mạch tổ hợp Inputs Outputs
sau mỗi 4 xung clock. I1 Q1 Q0 a I1 I0 x
0 0 0 0 0
I0 0
0 0 1 0 1
0 1 0 0 1 0
Q1 Q0 0 1 1 1 0
1 0 0 1 0 0
B) Đồ hình trạng thái Thanh ghi trạng thái 1 0 1 1 1
1 1 0 1 1
a=0 x=0 x=1 a=0 1
I1 I0 1 1 1 0 0
0 a=1 3
a=1 a=1
1 2
a=1 • Cho mô hình thực hiện này
a=0 x=0 x=0 a=0
– Vấn đề thiết kế mạch tuần tự trở thành thiết
kế mạch tổ hợp
37
Thiết kế mạch tuần tự (cont.)
E) Phƣơng trình đầu ra tối thiểu F) Mạch tổ hợp
I1 Q1Q0
a 00 01 11 10
a
0 0 0 1 1
I1 = Q1’Q0a + Q1a’ + x
Q1Q0’
1 0 1 0 1
I0 Q1Q0
00 01 11 10 I1
a
0 0 1 1 0 I0 = Q0a’ + Q0’a
1 1 0 0 1
x Q1Q0 I0
a 00 01 11 10
0 0 0 1 0 x = Q1Q0
Q1 Q0
1 0 0 1 0
38
Mô hình cơ bản của bộ xử lý chức năng đơn
chuyên biệt
Các đầu vào Các đầu vào
điều khiển dữ liệu bên Bộ điều khiển Luồng dữ liệu
bên ngoài ngoài
Các đầu vào Trạng thái Thanh ghi
đk luồng dữ tiếp theo và
Bộ điều liệu Luồng dữ điều khiển
khiển liệu logic
Các đầu ra
đk luồng dữ Thanh ghi Các đơn vị
chức năng
liệu trạng thái
Các đầu ra Các đầu ra
điều khiển dữ liệu bên
bên ngoài ngoài
Bộ điều khiển và luồng dữ liệu Nhìn bên trong bộ điều khiển và luồng dữ liệu
39
Ví dụ bộ xử lý chức năng đơn chuyên biệt
Tìm ƣớc số chung lớn nhất
!1
(a) Sơ đồ khối 1: (c) Giản đồ
• Đầu tiên tạo ra thật toán 1 !(!go_i) trạng thái
2:
• Biến đổi thuật toán thành go_i x_i y_i !go_i
2-J:
GCD
giản đồ trạng thái 3: x = x_i
d_o
– Thƣờng gọi là FSMD
4: y = y_i
(finite-state machine with
(b) Chức năng yêu cầu
datapath) 5: !(x!=y)
0: int x, y; x!=y
1: while (1) { 6:
– Có thể sử dụng biểu tƣợng 2: while (!go_i);
để thực hiện việc chuyển 3: x = x_i; x<y !(x<y)
4: y = y_i; 7: y = y -x 8: x = x - y
đổi 5: while (x != y) {
6: if (x < y) 6-J:
7: y = y - x;
else 5-J:
8: x = x - y; 9: d_o = x
}
9: d_o = x; 1-J:
}
40
Biểu tƣợng giản đồ trạng thái
Câu lệnh gán Câu lệnh lặp Câu lệnh rẽ nhánh
a = b while (đk) if (c1)
Câu lệnh tiếp { c1 stmts
theo thân vòng lặp else if c2
} c2 stmts
Câu lệnh tiếp theo else
other stmts
Câu lệnh tiếp theo
!đk
a = b C: C:
đk c1 !c1*c2 !c1*!c2
Thân vòng
Câu lệnh c1 stmts c2 stmts others
tiếp theo lặp
J: J:
Câu lệnh Câu lệnh
tiếp theo tiếp theo
41
Tạo ra tuyến dữ liệu
!1
• Tạo ra một thanh ghi cho 1:
1 !(!go_i)
biến đƣợc khai báo 2:
x_i y_i
!go_i
Datapath
• Tạo ra một hàm cho mỗi 2-J:
x_sel
3: x = x_i n-bit 2x1 n-bit 2x1
thuật toán tính toán y_sel
x_ld
4: y = y_i 0: x 0: y
• Kết nối các cổng, thanh ghi y_ld
5: !(x!=y)
và hàm != < subtractor subtractor
x!=y
5: x!=y 6: x<y 8: x-y 7: y-x
– Dựa trên việc đọc và ghi 6: x_neq_y
x<y !(x<y)
x_lt_y 9: d
• Tạo ra bộ nhận dạng đồng 7: y = y -x 8: x = x - y d_ld
d_o
nhất 6-J:
– Đối với mỗi luồng dữ liệu, 5-J:
điều khiển đầu vào và đầu ra 9: d_o = x
1-J:
42
Tạo ra biểu đồ trạng thái (FSM) cho bộ điều khiển
!1 go_i
1:
Controller !1 • Có cùng cấu trúc nhƣ
1 !(!go_i) 0000 1:
2: 1 !(!go_i)
0001 2: FSMD
!go_i
!go_i
2-J:
0010 2-J: • Thay thế các phép tính
3: x = x_i x_sel = 0
0011 3: x_ld = 1 phức tạp bằng luồng dữ
4: y = y_i
y_sel = 0
0100 4: y_ld = 1 liệu x_i y_i
!(x!=y)
5: !x_neq_y Datapath
0101 5:
x!=y x_sel
x_neq_y n-bit 2x1 n-bit 2x1
6: 0110 6: y_sel
x<y !(x<y) x_lt_y !x_lt_y x_ld
0: x 0: y
y_sel = 1 x_sel = 1
7: y = y -x 8: x = x - y 7: 8: y_ld
y_ld = 1 x_ld = 1
6-J: 0111 1000
1001 6-J: != < subtractor subtractor
5: x!=y 6: x<y 8: x-y 7: y-x
5-J: 1010 5-J: x_neq_y
9: d_o = x 1011 9: d_ld = 1 x_lt_y 9: d
d_ld
1100 1-J:
1-J: d_o
43
Tách thành bộ điều khiển và luồng dữ liệu
go_i
Mô hình thực hiện bộ điều khiển (a) Bộ điều khiển !1
0000 1: x_i y_i
go_i
x_sel 1 !(!go_i) (b) Dữ liệu
Mạch tổ hợp y_sel 0001 2:
!go_i x_sel
x_ld n-bit 2x1 n-bit 2x1
y_ld 0010 2-J: y_sel
x_sel = 0 x_ld
x_neq_y 0: x 0: y
0011 3: x_ld = 1
x_lt_y y_ld
d_ld
y_sel = 0
0100 4: y_ld = 1
!= < subtractor subtractor
x_neq_y=0 5:5: x!=y 6: x<y 8: x-y 7: y-x
0101 5: x_neq_y
Q3 Q2 Q1 Q0 x_neq_y=1
0110 6: x_lt_y 9: d
Thanh ghi d_ld
x_lt_y=1 x_lt_y=0
I3 I2 I1 I0
7: y_sel = 1 8: x_sel = 1 d_o
y_ld = 1 x_ld = 1
0111 1000
1001 6-J:
1010 5-J:
1011 9: d_ld = 1
1100 1-J:
44
Bảng trạng thái điều khiển cho ví dụ Tìm ƣớc số
chung lớn nhất (GCD)
Inputs Outputs
Q3 Q2 Q1 Q0 x_neq x_lt_ go_i I3 I2 I1 I0 x_sel y_sel x_ld y_ld d_ld
_y y
0 0 0 0 * * * 0 0 0 1 X X 0 0 0
0 0 0 1 * * 0 0 0 1 0 X X 0 0 0
0 0 0 1 * * 1 0 0 1 1 X X 0 0 0
0 0 1 0 * * * 0 0 0 1 X X 0 0 0
0 0 1 1 * * * 0 1 0 0 0 X 1 0 0
0 1 0 0 * * * 0 1 0 1 X 0 0 1 0
0 1 0 1 0 * * 1 0 1 1 X X 0 0 0
0 1 0 1 1 * * 0 1 1 0 X X 0 0 0
0 1 1 0 * 0 * 1 0 0 0 X X 0 0 0
0 1 1 0 * 1 * 0 1 1 1 X X 0 0 0
0 1 1 1 * * * 1 0 0 1 X 1 0 1 0
1 0 0 0 * * * 1 0 0 1 1 X 1 0 0
1 0 0 1 * * * 1 0 1 0 X X 0 0 0
1 0 1 0 * * * 0 1 0 1 X X 0 0 0
1 0 1 1 * * * 1 1 0 0 X X 0 0 1
1 1 0 0 * * * 0 0 0 0 X X 0 0 0
1 1 0 1 * * * 0 0 0 0 X X 0 0 0
1 1 1 0 * * * 0 0 0 0 X X 0 0 0
1 1 1 1 * * * 0 0 0 0 X X 0 0 0
45
Hoàn thiện thiết kế bộ xử lý chức năng đơn
chuyên biệt GCD
• Chúng ta đã tạo ra tuyến
dữ liệu Bộ điều khiển Tuyến dữ liệu
• Chúng ta đã có bảng
Trạng thái Thanh ghi
tiếp theo và
trạng thái và điều khiển điều khiển
logic logic
– Bộ phận bên trái là thiết
Thanh ghi Đơn vị chức
kế logic năng
• Không phải là một thiết
kế tối ƣu, nhƣng chúng
ta đã thực hiện các bƣớc
thiết kế cơ bản Bên trong bộ điều khiển và tuyến dữ liệu
46
Thiết kế bộ xử lý chức năng đơn chuyên biệt
mức chuyển đổi thanh ghi (RT)
• Chúng ta thƣờng bắt đầu
với một giản đồ trạng thái Gửi Bridge Nhậ
rdy_in A single-purpose processor that rdy_out n
converts two 4-bit inputs, arriving one
– Khác với thuật toán clock at a time over data_in along with a
rdy_in pulse, into one 8-bit output on
– Việc lặp lại chu trình thƣờng data_out along with a rdy_out pulse.
data_in(4) data_out(8)
chỉ chú ý đến chức năng nghĩa vấn Định đề
• Ví dụ
rdy_in=0 Bridge rdy_in=1
– Một bộ chuyển đổi bus biến rdy_in=1
WaitFirst4 RecFirst4Start RecFirst4End
đổi một bus 4-bit sang bus 8- data_lo=data_in
bit rdy_in=0 rdy_in=0 rdy_in=1
rdy_in=1
– Bắt đầu với FSMD WaitSecond4 RecSecond4Start RecSecond4End
data_hi=data_in
– Thƣờng đƣợc biết nhƣ mức
FSMD rdy_in=0
Inputs
chuyển đổi thanh ghi (RT) Send8Start rdy_in: bit; data_in: bit[4];
Send8End
data_out=data_hi Outputs
rdy_out=0
– Bài tập: hoàn thành thiết kế & data_lo rdy_out: bit; data_out:bit[8]
rdy_out=1 Variables
data_lo, data_hi: bit[4];
47
Tối ƣu bộ xử lý chức năng đơn
• Tối ƣu là nhiệm vụ tạo ra các giá trị của thông số thiết
kế phù hợp nhất có thể
• Các cơ hội tối ƣu
– Chƣơng trình nguồn
– FSMD
– Tuyến dữ liệu
– FSM
48
Tối ƣu chƣơng trình nguồn
• Phân tích thuộc tính của chƣơng trình và tìm ra các
khu vực có thể cải tiến đƣợc
– Số phép tính
– Kích thƣớc biến
– Độ phức tạp về thời gian và không gian
– Các toán hạng sử dụng
• Ví dụ phép nhân và phép chia rất phức tạp về độ tính toán
49
Tối ƣu chƣơng trình nguồn (cont’)
original program optimized program
0: int x, y; 0: int x, y, r;
1: while (1) { 1: while (1) {
2: while (!go_i); 2: while (!go_i);
3: x = x_i; // x must be the larger number
4: y = y_i; 3: if (x_i >= y_i) {
5: while (x != y) { 4: x=x_i;
replace the subtraction
6: if (x < y) 5: y=y_i;
operation(s) with modulo
7: y = y - x; }
operation in order to speed
else 6: else {
up program
8: x = x - y; 7: x=y_i;
} 8: y=x_i;
9: d_o = x; }
} 9: while (y != 0) {
10: r = x % y;
11: x = y;
12: y = r;
}
13: d_o = x;
}
GCD(42, 8) - 9 iterations to complete the loop GCD(42,8) - 3 iterations to complete the loop
x and y values evaluated as follows : (42, 8), (43, 8), x and y values evaluated as follows: (42, 8), (8,2),
(26,8), (18,8), (10, 8), (2,8), (2,6), (2,4), (2,2). (2,0)
50
Tối ƣu FSMD
• Các trƣờng hợp có thể cải tiến
– Ghép trạng thái
• Trạng thái không có biến đổi (chuyển trạng thái) có thể bỏ đi
• Trạng thái với các hoạt động độc lập có thể ghép
– Tách trạng thái
• Các trạng thái yêu cầu các toán hạng phức tạp (a*b*c*d) có thể tách
thành các trạng thái nhỏ hơn để giảm kích thƣớc phần cứng
– Lập lịch
51
Tối ƣu FSMD (cont.)
int x, y;
!1 FSMD ban đầu FSMD tối ưu
1:
int x, y;
1 !(!go_i) Loại bỏ trạng thái 1 – quá trình chuyển có giá trị không
2: 2:
đổi
!go_i go_i !go_i
x = x_i
2-J: 3:
Ghép trạng thái 2 và trạng thái 2J – không có hoạt y = y_i
3: x = x_i động lặp trong nó
5:
4: y = y_i Ghép trạng thái 3 và 4 – hoạt động gán độc lập với các xy
hoạt động khác 7: y = y -x 8: x = x - y
5: !(x!=y)
x!=y
9: d_o = x
6: Ghép trạng thái 5 và 6 – việc chuyển sang trạng thái 6
x<y !(x<y) có thể thực hiện ở trạng thái 5
y = y -x x = x - y
7: 8:
Loại bỏ trạng thái 5J và 6J – việc chuyển từ mỗi trạng
6-J: thái có thể thực hiện từ trạng thái 7 hoặc 8, tƣơng ứng
5-J:
Loại bỏ trạng thai 1-J – chuyển từ trạng thái 1-J có thể
d_o = x thực hiện trực tiếp từ trạng thái 9
9:
1-J:
52
Tối ƣu tuyến dữ liệu
• Chia sẻ các bộ phận chức năng
– Ghép từng chức năng, nhƣ thực hiện trong phần trƣớc, là
không cần thiết
– Nếu có cùng hoạt động xảy ra trong các trạng thái khác
nhau, chúng có thể chia sẻ một đơn vị chức năng đơn
• Các bộ phận đa chức năng
– ALUs hỗ trợ một loạt các hoạt động, nó có thể chia sẻ các
hoạt động trong các trạng thái khác nhau
53
Tối ƣu FSM
• Mã hóa trạng thái
– Là nhiệm vụ gán một mẫu bit duy nhất tới mỗi trạng thái
trong một FSM
– Kích thƣớc của thanh ghi trạng thái và mạch tổ hợp biến đổi
– Có thể đƣợc xem xét nhƣ một vấn đề sắp xếp
• Tối ƣu trạng thái
– Là nhiệm vụ ghép các trạng thái tƣơng đồng thành một trạng
thái duy nhất
• Trạng thái tƣơng đồng nếu kết hợp tất cả các đầu vào, hai trạng thái
tạo ra cùng đầu ra và cùng chuyển tới trạng thái kế tiếp
54
Tóm tắt
• Bộ xử lý chức năng đơn chuyên biệt
– Kỹ thuật thiết kế trực tiếp
– Có thể đƣợc xây dựng để thực hiện các thuật toán
– Thƣờng bắt đầu với FSMD
– Công cụ CAD có thể trợ giúp đắc lực
55File đính kèm:
bai_giang_thiet_ke_he_thong_nhung_chuong_2_cau_truc_phan_cun.pdf

