Xây dựng bộ điều khiển và nhận dạng tiếng nói bằng sử lý tín hiệu số DSP 56002
Trang 1TẬP LỆNH DSP DSP56002
Chương này mô tả tập lệnh vi xử lí DSP56002 gồm 67 lệnh Mỗi lệnh có
chiều dài là một hay hai từ Trong số đó có 30 lệnh cho phép truyền một hay hai dữ liệu song song Tập lệnh đươc chia ra các nhóm sau: nhóm truyền dữ liệu, số học, logic, thao tác bit, vòng lặp và nhóm điều khiển chương trình Tập lệnh chứa nhiều lệnh định hướng xử lí tín hiệu số.
A DẠNG LỆNH:
1./Lệnh một từ:
Lệnh một từ tác động lên tất cả các chế độ định địa chỉ của DSP56002, ngoại trừ các chế độ định địa chỉ tuyệt đối và dữ liệu tức thời Mã hợp ngữ nguồn cho loại lệnh một từ có thể nhận biết dựa vào bốn vùng: vùng mã nguồn, vùng toán hạng, vùng dữ liệu tuyến tính X, vùng truyền dữ liệu tuyến tính Y
Vùng mã nguồn: vùng này thường chỉ cho phép tính toán ALU được thực
hiện, cũng như xác định phép truyền, định địa chỉ tổng quát, điều khiển chương trình.
Vùng toán hạng:xác định toán hạng được sử dụng bởi mã nguồn.
Vùng truyền dữ liệu: vùng truyền dữ liệu xác định việc lựa chọn tuyến
truyền và các chế độ định địa chỉ tương ứng
SVTH:Huỳnh Quốc Trâm 4-57
Trang 2
2./ Lệnh hai từ:
Định địa chỉ tuyệt đối và các chế độ định địa chỉ dữ liệu tức thời đều là lệnh hai từ cung cấp một địa chỉ tuyệt đối 16 bit đầy đủ hay một dữ liệu tức thời 24 bit đầy đủ.
Ví dụ: MOVE #$123456,A0 MOVE #$2000,A0
B CÁC THAO TÁC TRUYỀN DỮ LIỆU SONG SONG:
Ba mươi lệnh của DSP56002 có thể thực hiện phép truyền một hay hai dữ liệu trong một chu kì lệnh đồng thời với mã nguồn của lệnh Dữ liệu truyền được từ thanh ghi đến thanh ghi, thanh ghi đến bộ nhớ và từ bộ nhớ đến thanh ghi được cho phép Nếu thanh ghi tích lũy A, B là thanh ghi nguồn thì phép dịch hay phép giới hạn xảy ra khi truyền dữ liệu Nếu A, B là thanh ghi đích thì dấu mở rộng và zero tự động đẩy vào bit thấp nhất khi truyền dữ liệu Khi phép truyền hai dữ liệu được thực thi trong cùng một lệnh thì bản sao nguồn được cho phép nhưng bản sao đích không được cho phép.
Ví dụ : SUBL B , A B , X:(R0) B , Y:(R4) ; cho phép
ADD B , A X1, B Y1, A ;không cho phép
C CÁC LOẠI TRUYỀN DỮ LIỆU SONG SONG:
Các loại truyền song song là:
o Truyền dữ liệu ngắn tức thời o Cập nhật thanh ghi địa chỉ o Truyền bộ nhớ X hay Y
o Truyền bộ nhớ X hay Y và thanh ghi o Truyền bộ nhớ L
o Truyền bộ nhớ XY
1./TRUYỀN DỮ LIỆU NGẮN TỨC THỜI:
Thao tác truyền song song này truyền toán hạng ngắn tức thời 8 bit đến thanh ghi đích Toán hạng 8 bit có thể được biểu diễn như một số nguyên không dấu hay số phân số có dấu phụ thuộc vào thanh ghi đích.
a./ Toán hạng tức thời số nguyên không dấu:
Một toán hạng ngắn tức thời được biểu diễn như một số nguyên không dấu nếu thanh ghi đích là A2, A1, A0, B2, B1, B0, R7…R0, N7…N0 Dữ liệu 8 bit được chứa trong bit có trọng số thấp nhất của thanh ghi đích và bit cao của thanh ghi đích tự động reset thành zero.
Ví dụ : ADD B,A #$81,B0 ;B0=$000081
b./ Toán hạng ngắn tức thời số phân số có dấu:
SVTH:Huỳnh Quốc Trâm 4-58
Trang 3
Một toán hạng ngắn tức thời 8 bit được biểu diễn như một số phân số có dấu nếu thanh ghi đích là X0, X1, Y0,Y1, A hay B Toán hạng 8 bit được chứa trong bit có trọng số cao của thanh ghi đích, còn bit thấp của thanh ghi đích tự động reset thành zero.
Ví dụ : ADD B,A #$81,B ;B0=$ff810000 000000
2./ Truyền dữ liệu từ thanh ghi đến thanh ghi:
Thao tác truyền song song truyền nội dung của thanh ghi nguồn đến thanh ghi đích.
Ví dụ: ADD B,A B,X13./ Cập nhật thanh ghi địa chỉ:
Thao tác truyền song song này cập nhật nội dung của thanh ghi địa chỉ Rn tùy thuộc chế độ định địa chỉ thanh ghi.
Ví dụ: ADD B,A (R1)+N1
4./ Truyền dữ liệu bộ nhớ X hay Y:
Thao tác truyền dữ liệu song song truyền toán hạng đến một từ đến hay đi đối với bộ nhớ X hoặc Y Từ bộ nhớ X hay Y đến thanh ghi hoặc ngược lại Ví dụ: ADD A,B A,X:$100
ADD A,B Y:$100,A
5./ Truyền dữ liệu bộ nhớ X hay Y và thanh ghi:
Thao tác truyền song song truyền một toán hạng một từ đến hoặc đi đối với bộ nhớ X hay Y và toán hạng một từ thanh ghi đến thanh ghi.
Ví dụ: ADD X,A A,X:(R3+N3) A,Y1
6./ Truyền dữ liệu bộ nhớ dài:
Thao tác truyền song song truyền một từ dài toán hạng đến hoặc từ bộ nhớ L (X:Y) Hai thanh ghi dữ liệu ALU được nối kết với nhau tạo thành toán hạng từ dài Điều này cho phép một giá trị dữ liệu chính xác gấp đôi hay một giá trị phức được truyền đến hay từ bộ nhớ L.
7./ Truyền dữ liệu bộ nhơÙ XY:
Thao tác truyền song song truyền hai từ đơn toán hạng đến hay từ bộ nhớ X và Y
Y0,Y:(R7)-D TẬP LỆNH Y0,Y:(R7)-DSP56002 :
Tập lệnh DSP56002 được chia thành các nhóm sau : Truyền dữ liệu
Số học Logic Thao tác bit Vòng lặp
Điều khiển chương trình
SVTH:Huỳnh Quốc Trâm 4-59
Trang 4
1./ Các lệnh truyền :
Lệnh truyền dữ liệu trên Bus dữ liệu X, bus dữ liệu Y, bus dữ liệu chương trình và bus dữ liệu toàn cục Các lệnh này xem như một dữ liệu ALU NOP (không xử lí )với khả năng thực hiện các phép truyền song song Lệnh truyền tác động lên bit giới hạn L và bit chia tỉ lệ S ở thanh ghi mã điều khiển (CCR), trong đó L là bit thứ 6 và S là bit thứ 7 CCR chiếm 8 bit thấp của thanh ghi trạng thái (SR) Bit L được tác động nếu giới hạn xảy ra khi đọc thanh ghi tích lũy dữ liệu ALU Bit S được tác động nếu dữ liệu tăng thêm được tác động khi thanh ghi tích lũy A và B được truyền trên cùng một bus Các lệnh truyền:
1.1 Lệnh LUA: Cập nhật địa chỉ.
Ví dụ: LUA (R0)+N0,N1 ; Cập nhật thanh ghi địa chỉ R0 và chứa địa chỉ cập nhật trong N1
1.2 Lệnh MOVE:Truyền dữ liệu
1.3.Lệnh MOVEC (hay MOVE): Truyền dữ liệu thanh ghi điều khiển
Ví dụ: MOVEC A,LC ; Truyền nội dung thanh ghi tích lũy đến thanh ghi điều khiển vòng lặp
Hay MOVE A,LC
1.4.Lệnh MOVEM (hay MOVE): Truyền nội dung đến bộ nhớ chương
trình và ngược lại.
Ví dụ :MOVE R3,P:(R2)-N2
MOVE P:$0000,LC Hay MOVEM P:$000,LC
1.5.Lệnh MOVEP : Truyền dữ liệu ngoại vi
Ví dụ : MOVEP X:$FFFE , A
2./ Các lệnh số học
Các lệnh số học dùng ALU dữ liệu để thực hiện thực hiện tất cả các loại phép xử lí số học Toán hạng nguồn cho các lệnh số học được chứa trong thanh ghi nhập ALU dữ liệu hay thanh ghi tích lũy Toán hạng dành cho kết quả được tạo ra bởi sự thực thi các lệnh số học thì ở thanh ghi A hay B Các lệnh số học cho phép truyền song song xảy ra đồng thời với việc thực thi mã lệnh Thao tác truyền song song sử dụng bus dữ liệu X và Y đến ALU dữ liệu đối với việc dùng trong các lệnh tuần tự và cũng có thể truyền kết quả tạo bởi thực thi lệnh trước kế đó từ ALU dữ liệu đến bộ nhớ X hay Y.
Lệnh số học thực thi trong một chu kì lệnh và có thể ảnh hưởng đến tất cả các bit trong thanh ghi mã lệnh điều kiện Những lệnh số học:
SVTH:Huỳnh Quốc Trâm 4-60
Trang 5
- ADC Cộng với cờ
- ADDR Dịch phải sau đó cộng
- MAC Nhân / Tích lũy
- MACR Nhân / Tích lũy và làm tròn
Lệnh Thao tác Cú pháp Nguồn ĐíchADC S+D+C→ D ADC S , D [pm] X , Y A , BADD S+D → D ADD S , D [pm] AX , X1 , X0
Y , Y1 , Y0
BA , BA , BADDL S+2D→ D ADDDL S, D [pm] A
BAADDR S+D/2→ D ADDR S , D [pm] A
B BASBC D-S-C→ D SBC S , D [pm] X , Y A , B
SVTH:Huỳnh Quốc Trâm 4-61
Trang 6
SUB D-S → D SUB S , D [pm] B
X , X1 , X0Y , Y1 , Y0
AA , BA , BSUBL 2D-S → D SUBL S , D [pm] A
B BASUBR D/2-S → D SUBR S , D [pm] A
C : Cờ nhớ
[pm] : Truyền song song
2.2 Các lệnh nhân số học :
Trong phép tính nhân, kết quả được chứa trong thanh ghi tích lũy A hoặc B Nguồn S1, S2 là các thanh ghi: X1, X0 , Y1 , Y0
Lệnh Thao tác Cú phápMAC D ±(S1*S2) → D
D ± (S1*2 n− ) → D
MAC ±S1 , S2 , D [pm]MAC ±S1 , #n , D MACR D ± (S1*S2)+r → D
D ± (S1*2 n− )+r → D
MACR ±S1 , S2 , D [pm] MACR ± S1 , #n , D
MPY ±(S1*S2) → D
±(S1*2 n− ) → D
MPY ± S1 , S2 , D [pm]MPY ±S1 , #n , D
MPYR ±(S1*S2) + r → D
±(S1*2 n− ) + r → D
MPYR ± S1 , S2 , D [pm]MPYR ±S1 , #n , D
[pm] : truyền song song r : làm tròn
2.3 Các lệnh số học khác :
Lệnh Cú pháp Thao tác Nguồn ĐíchTFR TFR S , D [pm] S → D
ABX1 , X0Y1 , Y0
BAA , BB , ANEG NEG D [pm] 0 – D → D A , BABS ABS D [pm] D→ D A , BCLEAR CLR D [pm] 0 → D A , B
Nếu E.U.Z = 0 thì ASL → D Rn−1→ Rn
SVTH:Huỳnh Quốc Trâm 4-62
Trang 7
NORM R
n, D
Nếu E =1 thì ASR → D Rn+1→ RnNgược lại thì NOP
A , B
Rn : Địa chỉ thanh ghi Rn
E : Bit mở rộng (Bit thứ 15 của thanh ghi trạng thái) U : Bit không bình thường (Bit thứ 4 của thanh ghi trạng thái) Z : Bit zero (bit thứ 2 của thanh ghi trạng thái)
3./ Các lệnh logic :
Các lệnh logic sử dụng dữ liệu ALU để thực hiện tất cả các loại thao tác logic Các toán hạng của nguồn logic (ngoại trừ ANDI và ORI) được chứa trong thanh ghi nhập hay thanh ghi tích lũy của dữ liệu ALU, kết quả tạo bởi lệnh logic (ngoại trừ ANDI và ORI) được chứa trong thanh ghi tích lũy A hay B Kết quả tạo bởi lệnh ANDI hoặc ORI được chứa trong thanh ghi MR, CCR, OMR Các lệnh logic (ngoại trừ ANDI và ORI) đều cho hai phép truyền song song được thực thi đồng thời với phép toán nguồn Phép truyền song song sử dụng XDB và YDB Vì vậy, phép truyền song song có thể truyền dữ liệu mới được thoát ra khỏi bộ nhớ X hay Y đến dữ liệu ALU với các lệnh tuần tự và cũng có thể truyền kết quả được tạo ra của lệnh đến trước đó từ dữ liệu ALU đến bộ nhớ X hay Y.
Các lệnh logic thực thi trong một chu kì lệnh và có thể tác động đến tất cả
các bit trong thanh ghi mã điều khiển CCR.
3.1 Lệnh LOGIC:
Lệnh Cú pháp Thao tác Nguồn ĐíchAND AND S , D S*D → D X1 , X0
Y1 , Y0 A , BA , BOR OR S , D S+D → D X1 , X0
Y1 , Y0 A , BA , BEOR EOR S , D S ⊕ D → D X1 , X0
Y1 , Y0
A , BA , BNOT NOT D _
D → D A , B
Những lệnh này là lệnh thao tác 24 bit, được thực hiện trên bit
24 →47 của thanh ghi tích lũy A và B 3.2 Lệnh dịch và xoay:
Lệnh Cú pháp Thao tác ĐíchLSL LSL D Dịch trái thanh ghi tích lũy A , B
SVTH:Huỳnh Quốc Trâm 4-63
Trang 8
Bit 24 = 0 C = bit 47
ROL ROL D Xoay trái thanh ghi tích luỹ Bit 24 = C
3.3 Lệnh LOGIC tức thời :
4./ Lệnh thao tác trên bit :
Những lệnh thao tác trên bit :
BCLR Kểm tra và xóa bit
BTST Kiểm tra bit trên bộ nhớ và thanh ghi
BCLR BCLR #n , X:<erea>BCLR #n , Y:<erea>BCLR #n , D
D(n) → C0 → D(n)BSET BSET #n , X:<erea>
BSET #n , Y:<erea>BSET #n , D
D(n) → C1 → D(n)BCHG BCHG #n , X:<erea>
BCHG#n,Y:<erea>BCHG #n , D
D(n) → C D(n) là bit thứ n của vùng toán hạng 24 bit , 0 ≤ n ≤ 23
SVTH:Huỳnh Quốc Trâm 4-64
Trang 9
5./ Các lệnh vòng lặp:
Các lệnh vòng lặp đó là DO và ENDDO Lệnh ngắt DO tạo ra để bắt đầu vòng lặp DO phần cứng Lệnh ENDDO có thể được dùng để kết thúc ngang vòng lặp DO phần cứng trước khi nó hoàn thành Nội dung thanh ghi đếm vòng lặp (LC) xác định số lần vòng lặp được lặp lại Nội dung thanh ghi (LA) chỉ ra vị trí của từ lệnh cuối cùng của vòng lặp DO LC và LA có thể được nén vào hệ thống Stack (SS), vì vậy cho phép các vòng lặp DO phần cứng được ngắt hay chèn Chúng có thể được đẩy ra khỏi vùng Stack bởi lệnh RET hay ENDDO
6./ Các lệnh điều khiển chương trình:
Các lệnh điều khiển chương trình bao gồm các lệnh nhảy, nhảy có điều kiện và các lệnh tác động lên PC và SS Dữ liệu bất kì nào đó truyền trên XDB và YDB có thể được xác định trong một số lệnh điểu khiển chương trình Những lệnh này cũng có tác động lên CCR.
* Các lệnh điều khiển chương trình :
DEBUGcc Vào chế độ sửa lỗiIll Lệnh không hợp lệ Jcc Nhảy có điều kiện
JMP Nhảy
JCLR Nhảy nếu bit clear (nhảy khi bit =0) JSET Nhảy nếu bit set (nhảy khi bit =1)JScc Nhảy đến chương trình con có điều kiện JSR Nhảy đến chương trình con
JSCLR Nhảy đến chương trình con nếu bit clear JSSET Nhảy đến chương trình con nếu bit được setNOP Không làm gì cả
REP Lặp lại lệnh kế tiếp
RESET Reset thiết bị ngoại vi trên chip RTI Trở về từ ngắt
RTS Trở về từ chương trình con STOP Ngừng xử lí
SWI Ngắt phần mềm WAIT Chờ ngắt
SVTH:Huỳnh Quốc Trâm 4-65
Trang 10
BẢNG NHÓM CÁC LỆNH ĐIỀU KHIỂN CHƯƠNG TRÌNH
Mã nguồn Phép toán Cấu trúc ngữ phápREP
Lặp lại lệnh kế tiếp cho đến khi LC=1TEMP→LC
REP #xxxREP X:<ea>REP Y:<ea>REP SJSET Nếu S(n)= 1 thì xxxx→PC
Ngược lại PC+1→PC JSET #n,X:<ea>,xxxx JSET #n,Y:<ea>,xxxxJSET #n,S,xxxxJCLR Nếu S(n)= 0 thì xxxx→PC
Ngược lại PC+1→PC
JCLR #n,X:<ea>,xxxx JCLR #n,Y:<ea>,xxxxJCLR #n,S,xxxxJSSET Nếu S(n)= 1 thì SP+1 →SP
PC→SSH SR→SSL xxxx→PCNgược lại PC+1→PC
JSSET #n,X:<ea>,xxxx JSSET #n,Y:<ea>,xxxxJSSET #n,S,xxxxJSCLR Nếu S(n)= 0 thì SP +1→SP
PC→SSH SR→SSL xxxx→PCNgược lại PC+1→PC
JSCLR #n,X:<ea>,xxxx JSCLR #n,Y:<ea>,xxxxJSCLR #n,S,xxxx
SVTH:Huỳnh Quốc Trâm 4-66