Hệ thống điều khiển nhúng - Phần 3 pps

13 283 0
Hệ thống điều khiển nhúng - Phần 3 pps

Đ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

http://www.ebook.edu.vn 47 HầuhếtcácứngdụngđềucónhucầuvềbộnhớRAMonChipvìvậymộtsốdòng FPGA hiện nay cũng tích hợp thêm cả các phần tử nhớ RAM vàđược gọi là RAM nhúng (embeddedRAM). Cácphần tửRAMđóđược tổchứcthànhtừng khốivà tuỳ thuộcvàokiếntrúccủaFPGAnósẽđượcphânbốlinhhoạt,thườnglàxungquanhcác phầntửngoạivi hoặc phânbốđềutrênbềmặtChip.Mộthìnhảnhminhhoạvềphân bốRAMtrongkiếntrúcFPGAđượcmôtảnhưtrongHình2‐45.   Hình2‐45:HìnhảnhcủaChipcócáccộtlàcáckhốiRAMnhúng ■FPGAvớihạtnhânDSP Thựcchấtđólàmộttổhợpnhằmtăngtốcvàkhảnăngtínhtoán.Kháiniệmnàycũng tươngtựnhưcácbộđồngxửlýtoánhọctrongkiế ntrúcmáytính.Nguyênlýlànhằm sansẻvàgiảmbớttảisangFPGAđểthựcthicácchứcnăngtínhtoánlớn(thôngthường  đòihỏithựchiệntrongnhiềunhịphoạtđộng củaChipDSP)vàchophépChipDSPtập trungthựchiệncácchứcnăngđơnnhịptốiưu.TổhợpFPGAvàDSPlàm ộtkiếntrúc rấtlinhhoạtvàđặcbiệtcảithi ệnđượchiệusuấtthựchiệnvàtăngtốchơnrấtnhiềuso vớikiếntrúcnhiềuChipDPShoặcASICsđồngthờigiáthànhlạithấphơn.   Hình2‐46:SơđồnguyênlýmạchghépnốiVĐKvàFPGA 48 3 CƠ SỞ KỸ THUẬT PHẦN MỀM NHÚNG 3.1 Đặc điểm phần mềm nhúng 9 Hướngchứcnănghoáđặcthù 9 Hạnchếvềtàinguyênbộnhớ 9 Yêucầuthờigianthực 3.2 Biểu diễn số và dữ liệu  Đơnvịcơbảnnhấttrongbiểudiễnthôngtincủahệthốngsốđượcgọilàbit, chínhlàkýhiệuviếttắtcủathuậtngữbi narydigit.  1964,IBMđãthiếtkếvàchếtạomáytínhsốsửdụngmộtnhóm8bitđểđánh địachỉbộnhớvàđịnhnghĩarathuậtngữ8bit=1byte.  Ngàynaysửdụngrộngrãi thuậtngữwordlàmộttừdữliệudùngđểbiểudiễn kíchthướcdữliệumàđượcxửlýmộtcáchhiệuquảnhấtđốivớimỗiloạikiến trúcxửlýsốcụthể. Chínhvìvậymộttừcóthểlà16bits,32bits,hoặc64bits…  Mỗimộtbytecóthểđượcchiarathànhhainửa4bitvàđượcgọilàcácnibble. Nibblechứacácbíttrọng sốlớnđượcgọilànibblebậccao,vànibblechứacácbit trọngsốnhỏđượcgọilànibblebậcthấp. 3.2.1 Các hệ thống cơ số Trongcáchệthốngbiểudiễnsốhiệnnayđềuđượcbiểudiễnởdạngtổngquátlàtổng luỹthừatheocơsố,vàđượcphânloạitheogiátrịcơsố.Mộtcáchtổngquát mộthệbiểu diễnsốcơsốbvàalàmộtsốnguyênnằmtrongkhoảnggiátrịcơsốbđượcbiểudiễn nhưsau:  1 10 0 n nn i nn i i Aab ab a ab − − = =+ +⋅⋅⋅+=⋅ ∑  (1.1) Vídụnhưcơsốbinary(nhịphân),cơsốdecimal(thậpphân),c ơsốhexadecimal,cơsố8 Octal(bátphân).  Vídụvềbiểudiễncácgiátrịtrongcáchệcơsốkhácnhau: 243.51 10=2x10 2 +4x10 1 +3x10 0 +5x10 ‐1 +1x10 ‐2  212 3=2x3 2 +1x3 1 +2x3 0 =2310 10110 2=1x2 4 +0x2 3 +1x2 2 +1x2 1 +0x2 0 =2210  Hailoạicơsốbiểudiễnthôngdụngnhấthiệnnaychocáchệthốngxửlýsốlàcơsốnhị phânvàcơsốmườisáu. 3.2.2 Số nguyên Trongbiểudiễnsốcódấuđểphânbiệtsốdươngvàsốâmngườitasửdụngbittrọngsố lớnnhấtquiướclàmbitdấuvàcácbitcònlạiđượcs ửdụngđểbiểudi ễngiátrịđộlớn củasố.Vídụmộttừ8bitđượcsửdụngđểbiểudiễngiátrị‐1sẽcódạngnhịphânlà 10000001,vàgiá trị+1sẽcódạng00000001.Nhưvậyvới mộttừ8bitcóthểbiểudiễn http://www.ebook.edu.vn 49 đượccácsốtrongphạmvitừ‐127đến+127.MộtcáchtổngquátmộttừNbitsẽbiểu diễnđược‐2 (N‐1) ‐1đến+2 (N‐1) ‐1.  Chúýkhithựchiệncộnghaisốcódấu: 9 Nếuhais ốcùng dấuthìthựchiệnphépcộngphầnbiểudiễngiátrịvàsửdụngbit dấucùngdấuv ớihaisốđó. 9 Nếuhaisốkhácdấuthìkếtquảsẽnhậndấucủatoántửlớnhơn,vàthựchiện phéptrừgiữatoántửcógiátrịlớnhơnvớitoán tửbéhơn.  Vídụ1:Cộnghaisốcódấu01001111 2và001000112. 1111 ⇐ carries  01001111  (79)  0+0100011  +(35)  01110010  (114)  Vídụ2:Cộnghaisốcódấu01001111 2và011000112. Nhớcuốicùng 1 ← 1111 ⇐carries Tràn  0 1001111 (79) bỏnhớ  0+ 1100011 +(99) 0 0110010 (50)  Vídụ3:Trừhaisốcódấu01001111 2và011000112.   0112 ⇐borrows  0 1100011  (99)  0‐ 1001111 ‐(79)  0 0010100  (20)  Vídụ4:Cộnghaisốkhácdấu10010011 2(‐19)và000011012(+13)   012  ⇐borrows  1 0010011  (‐19)  0‐ 0001101 +(13)  1 0000110 (‐6)  Thuậttoánthựchiệnphéptínhcódấu:  (1) Khaibáovàxóacácbiếnlưugiátrịvàdấuđểchuẩnbịthựchiệnphéptính. (2) Kiểmtradấucủatoántửthứnhấtđểxemcóphảisốâmkhông.Nếulàsốâm thì thựchiệnbùdấuvàbùtoántử.Nếukhôngthìchuyểnquathựchiệnbước3. (3) Kiểmtradấucủatoántửthứhaiđểxemcóphảisốâmkhông.Nếulàsốâmthì  thựchiệnbùdấuvàbùtoántử.Nếukhôngthìchuyểnsangthựchiệnbước4. (4) Thựchiệnphépnhânhoặcchiavớicáctoántửvừaxửlý. (5) Kiểmtradấ u.Nếuzerothìcoinhưđãkếtthúc.Nếubằng‐1(0ffh)thìthựchiện phéptínhbùhaivớikếtquảthuđượcvàkếtthúc.  50 Hiệnnayngườitasửdụnghaiquiướcbiểudiễns ốnguyênphânbiệttheothứtựcủa bytetrọngsốtrongmộttừđượcbiểudiễn: • Litteedian:bytetrọngsốnhỏnhấtđứngtrướcÆthuậnlợichophépcộnghoặc trừvà • Bigendian:bytetrọngsốlớnnhấtđứng trướcÆthuậnlợichophépnhânhoặc chia. Vídụxétmộtsốnhịphân4‐byte   Theoquiướcbiểudiễnlitteedianthìthứtựđịachỉlưutrongbộnhớsẽlà: Địachỉcởsở+0=Byte0 Địachỉcơsở+1=Byte1 Địachỉcơsở+2=Byte2 Địa chỉcơsở+3=Byte3 Vàtheoquiướcbiểudiễnsốbigediansẽlà: Địachỉcởsở+0=Byte3 Địachỉcơsở+1=Byte2 Địachỉcơsở+2=Byte1 Địachỉcơsở+3=Byte0 3.2.3 Số dấu phảy tĩnh Chúngtacóthểsửdụngmộtkýhiệudấuchấmảođểbiểudiễnmộtsốthực.D ấuchấm ảođượcsửdụngtrongtừdữliệudùngđểphânbiệtvàngăncáchgiữa phầnbiểudiễn giátrịnguyêncủadữliệuvàmộtphầnlẻthậpphân.Vídụvềmộttừ8‐bitbiểudiễnsố dấuphảyđộngđượcchỉranhưtrongHình3‐1.Với cáchbiểudiễnnày,giátrịthựccủa sốđượctínhnhưsau:  43210123 43210 1 2 3 432101 23 22222 2 2 2 02 12 02 12 12 12 02 12 8211/21/8 11.625 Na a a a a a a a −−− −− − −−− =+++++ + + = ⋅ +⋅ +⋅ +⋅ +⋅ +⋅ + ⋅ +⋅ =+++ + =   Hình3‐1:Địnhdạngbiểudiễnsốdấuphảytĩnh8bit Nhượcđiểmcủaphươngphápbiểudiễnsốdấuphảytĩnhlàvùngbiểudiễnsốnguyên bịhạnchếbởidấuphảytĩnhđượcgáncốđịnh.Điềunàydễxảyra hiệntượngtrànsố khithựchiệncácphépnhânhaisốlớn. http://www.ebook.edu.vn 51 3.2.4 Số dấu phảy động Phươngphápbiểudiễnsốchínhxácvàlinhhoạtđượcsửdụngrộngrãihiệnnaylàhệ thốngbiểudiễnsốdấuphảyđộng.Đâycũnglàmộtphươngphápbiểudiễn sốkhoa họcbaogồm2phần:phầnbiểudiễnlưutrữsốmantissavàmộtphầnlưutrữbiểudiễn sốexponent.Vídụtronghệcơsốthậpphân,mộtsốnguyênbằng 5cóthểđượcbiểu diễnhoặclà 1 0.5 10⋅ , 1 50 10 − ⋅ ,ho ặc 2 0.05 10⋅ ,…Trongmáytínhsốhoặchệthốngsốnói chung,cácsốdấuphảyđộngnhịphânthườngđượcbiểudiễndạng  2 E NM=⋅  (1.2) Trongđó,Mlàphầngiátrịsốmantissa,ElàphầnlũythừacủasốN.Mthườnglàcác giátrịlẻmàphầnthậpphâncủanóthườngnằmtrongkhoảng 0.5 1M≤≤ .  Hình3‐2môtảbiểudiễnmộtsốdấuphảyđộngcủatừ8bitgồm5bitbiểudiễnphầnsố cónghĩamantissa,và3bitbiểudiễnphầnlũythừ a.Vìcácphầnmantissavàlũythừa đềucóthểnhậncácgiátrịâmvìvậycácbitđầutiêncủacácphầngiátrịđóđềucóthể đượcsửdụngđểbiểudiễndấukhic ầnthiết.  Hình3‐2:Biểudiễndấuphảyđộng8bít TrongmộtsốVXL,VĐKdođộrộngtừnhịphânnhỏnêncóthểsửdụng2từđểbiểu diễnmộtsốdấuphảyđộng.Một từsẽdùngđểbiểudiễngiátrịmantissa,vàmộtphầ n biểudiễngiátrịexponent. Nếuphầnmantissađượcchuẩnhóathànhmộtsốlẻcógiátrịtrongkhoảng 0.5 1M ≤ ≤  thìbitđầutiênsaubitdấuthườnglàmộtvàsẽcómộtdấuphảynhịphânẩnngaysau  bitdấu. PhầnbiểudiễnexponentEsẽquyếtđịnhvịtrícủadấuphảyđộ ngsẽdịchsangtrái(E>0) haysangphải(E<0)baonhiêuvịtrí.Vídụbiểudiễnmộtsốthậpphân6.5bằngmộttừ 8bitdấuphảyđộngnhưsau:  2 11 3 .1101 2 11 1 26.5 2416 N =⋅ ⎡⎤ =++ = ⎢⎥ ⎣⎦  Trongtrườnghợpnàyphầnmantissagồm4bitvàphầnexponentgồm3bit.Nếutadịch dấuphảysangphải3vịtríbitthìchúngtasẽcómộtsốnhịphândấuphả yđộngbiểu diễnđượcsẽlà110.1. Tổngquáthóatrongtrườnghợpmộtsốnhịphândấuphảyđộngnbitgồmmbitbiểu diễnphầnmantissavàebitbiểudiễnphần exponentthìgiátrịcủasốlớnnhấtcóthểbiểu diễnđượcsẽlà  1 1(21) max (1 2 )2 e m N − −+ − =−  (1.3) Vàsốdươngnhỏnhấtcóthểbiểudiễnlà 52  1 (2 1) min 0.5 2 e N − −− =⋅  (1.4) TheotiêuchuẩnIEEE754và854có2địnhdạngchínhchosốdấuphảyđộnglàsốthực dài(long)vàsốthựcngắn(short)chúngkhácnhauvềdảibiểudiễnvàđộlớn lưutrữ yêucầu.Theochuẩnnày,sốthựcdàiđượcđịnhdạng8bytebaogồm1bitdấu,11bit exponentvà53bitlưugiátrịsốcónghĩa.Mộtsốthựcngắnđượcđịnhd ạng4bytebao gồm1bitdấu,8bitlũythừavà24bitlưugiátrịs ốcónghĩa.Mộtsốthựcngắncóthể biểudiễnvàxửlýđượcsốcógiátrịnằm trongdải10 38 to10 ‐38 vàsốthựcdàicóthểbiểu diễnvàxửlýđượcsốcógiátrịthuộcdải10 308 to10 ‐308 .Đểbiểudiễnmộtgiátrịtương đươngnhưvậybằngsốdấuphảytĩnhthìcầntới256bithay32bytedữliệu. 3.2.5 Một số phép tính cơ bản  Thựchiệnphépnhân VìtrongcácVĐKnhúngthườngkhônghỗtrợcácphépnhânnhiềubyte.Côngviệcnày phảiđượcthựchiệnbởingườipháttriểnchươngtrìnhvàthểhiệndưới dạngmộtthuật toándựatrêncácphéptoáncósẵnápdụngchosốnhịphânlàcộng/trừvàdịch.Đểcó mộtsựhiểubiếtrõrànghơnvềthuậttoánthựchiệnphép nhân,chúngtaxétmộtvídụ vềmộtphéptínhnhânhaisốnhịphântổngquátnhưsau:  10 10 10 10 10 10 222 222 ()2 ()2 ()2 n n n n n n Aa a a Bb b b bA bA bA =⋅+⋅⋅⋅+⋅+⋅ =⋅+⋅⋅⋅+⋅+⋅ ⋅⋅+⋅⋅⋅+⋅⋅+⋅⋅   Nguyênlýthựchiệnphépnhâncũnggiốngnhưtathựchiệnphépnhânhaiđathức. Trongtrườnghợpnhânhaisốnhịphânthìmỗiphầntửlàmộtbit,bytehoặctừ.Ví dụ cụthểvớihaisốnhịphân4bittathuđượcphépnhânthựchiệnnhưsau:  3210 3210 3210 3210 3210 30 20 10 00 4321 31 21 11 01 5432 32 22 12 02 6543 33 23 13 03 2222 2222 2222 2222 2222 2222 aaaa bbbb ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ⋅+⋅+⋅+⋅ ⋅+⋅+⋅+⋅ ⋅⋅+ ⋅⋅+⋅⋅+⋅⋅ ⋅⋅ + ⋅⋅ +⋅⋅ + ⋅⋅ ⋅⋅+ ⋅⋅ +⋅⋅+⋅⋅ ⋅⋅ + ⋅⋅ +⋅⋅ + ⋅⋅   Thuậttoánthựchiệnphépnhân32bittheotrìnhtựsau: (1) Cấpphátvùngnhớđủlớnđểlưusốđượcnhân32bitvàcóthểthựchiệnphép dịchtrái32lần.Đặtgiátrịkhởit ạochobộđếmbitbằng32vàxóathanhghi haybiếnlưugiữkếtquảphépnhân.(Chúý:Sốlượngbitcầnđểlưugiátrịkết quảphảibằngtổngsốlượngbitcầnđể lưucácsốhạngphépnhân) (2) Dịchsốnhânsangphảimộtvịtríbitvàkiểmtracờnhớ.Nếukhôngcócờnhớ thìtiếptụcthựchiệnbước3.Nếu xuấthi ệncờnhớthìcộngthêmvàobiếnlưu kếtquảhiệntạicủaphépnhânmộtgiátrịbằnggiátrịcủasốđược nhân. http://www.ebook.edu.vn 53 (3) Dịchsốđượcnhânsangtráimộtvịtríbitvàgiảmbộđếmdịchđimột.Kiểm traxemgiátrịcủabộđếmdịchcóbằngkhôngkhông?Nếubằngkhôngthì thựchiện tiếpbước4,cònkhôngthìquaytrởlạithựchiệnbước2. (4) Kếtquảcuốicùngcủaphépnhânđượclưutrongthanhghibiếnkếtquả.  Vídụphépnhântừnhịphân4 bit1100x1101  0. A 1100(12)  B 1101(13)  Counter 100(4)  Product 0 1. A 11000(24)  B 0110(6)  Counter 011(3)  Product 1100(12) 2. A 110000(48)  B 0011(3)  Counter 010(2)  Product 1100(12) 3. A 1100000(96)  B 0001(1)  Counter 001(1)  Product  111100(60) 4. A 11000000(192)  B 0001(1)  Counter 000(0)  Product 10011100(156)  ThựcthithuậttoánthựchiệnphépnhânsốnguyênkhôngdấubằngngônngữC/C++:            Thựchiệnphépchia Phépchiacóthểđượcthựchiệnbằngcáchchuyểnđổithànhphépnhânvà phépdịch. Vídụmuốnthựchiệnphépchia5tronghệthậpphânchúngtacóthểthựchiệnbởimột phépnhân2vàdịchdấuphảycủakếtquảthuđược sang trái mộtđơnvị.Mộtcách tổngquátcóthểthựchiệnchuyểnđổimộtphépchiatươngđươngnhưsau: long product = 0; while (multipier != 0){ if (multiplier & 1){ product += multiplicand; } multiplier >> =1; multiplicand <<= 1; } 54  x nx aan =  Đốivớiphépchianhịphânthìnsẽđượcchọnlàmộtsốlũythừacủa2vàphảilớnhơn a.  Thuậttoánthựchiệnphépchiacóthểđượcthựcthibởiphép dịch,cộngvàtrừnhưsau: (1) Nạpbiếnlưugiátrịthươngsốbằnggiátrịcủasốbịchia;sốbướcdịchcầnthực hiệnbằngsốbitlưusốbịchia. (2) Dịchtráibiếnlưugiátrịthươngsốvàophầnbiếnlưugiátrịdưcủaphépchia. (3) Sosánhsốdưvớisốchia.Nếusốdưlớnhơnhoặcbằngsốchiathìth ựchiện phéptrừsốdưđimộtgiátrịbằnggiátrịs ốchia.Nếukhôngthìchuyểnsang thựchiệnbướctiếptheo. (4) Giảmbiếnlưugiátrịsốlầnlặpvàkiể mtraxemnóđãbằngkhôngchưa.Nếu chưabằngkhôngthìquaytrởlạibước2thực hiệntiếp,cònnếubằngkhôngthì  giátrịcủaphépchiađượclưutrongônhớch ứasốdưvàthươngsố.  ThựcthithuậttoánbằngngônngữC/C++              Trướckhithựchiệnphépchiayêucầucầnphảikiểmtralỗichiakhôngcóthểxảyra. Thu ậttoánthựchiệnphépchiachủyếudựatrênphépdịchvàphéptrừ.Sốbịchiasẽ dịchsangtráivàlưuvàomộtbiến,phầndưsẽđượcsosánhvớisốchia.Nếu phầndư bằnghoặclớnhơnsốchiathìphầndưsẽđượctrừđimộtgiátrịbằngsốchiavàsốbị chiasẽđượccộngthêmmột vàdịchsangtrái mộtvịtríbitvà đóchínhđượcgọilà thươngsố.Quátrìnhnàyđượclặplạivàtiếptụcchođếnkhisốlầndịchbằngđúngsố bitcủatừlưusốbịchia.  Cácbiếnđượcsửd ụngtrongquátrìnhthựchiệnphépchiabaogồm5biếnsố:sốbị chia,sốchia,thươngsố,sốdưvàsốlầndịch.Trongquátrìnhthựchiệnthìsốbịchia, thươngsố, vàsốdưcùngchiasẻchungmộtvùngônhớ.Sốdưvàsốbịchiasẽthuộc cùngmộttừlớn.Sốbịchianằmtrongphầntừtrọngsốthấpvàsốdưsẽnằmtrong phần từtrọngsốcao.Saukhithựchiệnxongphépchiathìsốbịchiasẽđượcdịchtoàn bộsangtráivàophầnbiếnsốdưvàđượcthaythếbằngthươngsố.Kếtquảcònlạithu i = 0; quotient = 0; if (divisor == 0) goto error; while (dividend > divisor) divisor <<= 1; i++; divisor >>= 1; while (i != 0){ quotient <<= 1; if (divisor < dividend ) dividend -= divisor; quotient ++; divisor >>=1 , i ; } http://www.ebook.edu.vn 55 đượcchỉcònlàsốdưvàthươngsố.Hìnhảnhvềbộnhớlưucácbiếnsốthựchiệntrong thuậttoánnàyđượcminhhoạnhưtrongHình3‐3.  Hình3‐3:Thựchiệnphépchia 3.3 Tập lệnh 3.3.1 Cấu trúc tập lệnh CISC và RISC HầuhếtcácviđiềukhiểnvàVXLnhúngcócấutrúcđượcpháttriểndựatheokiếntrúc máytínhtậplệnhphứchợpCISC(ComplexInstructionSetComputer).CISClàmộtcấu trúcx ửlýcáclệnhphứchợp,tứclàmộtlệnhphứchợpsẽbaogồmmộtvàilệnhđơn. Theo nguyên lý này có thể giảm bớtđược thời gian dùngđểtruy nhập vàđọc mã chươngtrìnhtừbộnhớ.Điềunàyrấtcóýnghĩavớicáckiếntrúcthiếtkếxửlýtínhtoán theokiểutuầntự.Lýdochosựrađờicủatậplệnhphứch ợpnhằmgiảmthiểudung lượngbộnhớcầnthiếtđểlưugiữchươngtrìnhthựchiện,vàsẽgiảmđượcgiáthànhvề 56 bộnhớcầncungcấpchoCPU.Cáclệnhcànggọnvàphựchợpthìsẽcầncàngítkhông gianbộnhớchươngtrình.Kiếntrúctậplệnhphứchợpsửdụngcáclệnh vớiđộdàibiến đổituỳthuộcvàođộphứchợpcủacáclệnhtừđơngiảnđếnphứctạp.Trongđósẽcó mộtsốlượnglớncáclệnhcóthểtruynhậptrựcti ếpbộnhớ.Vìvậyvớikiếntrúctập lệnhphứchợpchúngtasẽcóđượcmộttậplệnhđadạngphứchợp,gọn,vớiđộdài lệnhthayđổivàdẫnđế nchukỳthựchiệnlệnhcũngthayđổituỳtheođộphứchợp trongtừnglệnh.Mộtvàilệnhphứchợp,đặcbiệtlàcáclệnhtruynhậpbộnhớcầntới vàich ụcchukỳđểthựchiện.TrongmộtsốtrườnghợpcácnhàthiếtkếVXLthấyrằng cầnphảigiảmchukỳnhịplệnhđểcóđủthờigianchocáclệnhhoànthànhđiềunày cũngdẫnđếnthờigianthựchiệnbịkéodàihơn.  MộtsốVĐKđượcpháttriểntheokiếntrúcmáytínhtậplệnhrútgọnRISC(Reduced InstructionSetComputer).RISCphùhợpvới cácthiếtkếkiếntrúcxửlýcáclệnhđơn. Thuậtngữ“rútgọn”(reduced)đôikhibịhiểukhôngth ậtchínhxáctheonghĩađencủa nóthựcchấtýtưởnggốcxuấtphát từkhảnăngcungcấpmộttậplệnhtốithiểuđểthực hiệntấtcảcáchoạtđộngchínhnhư:chuyểndữliệu,cáchoạtđộngALUvàrẽnhánh điềukhiểnchương trình.Chỉcócáclệnhnạp(load),lữutrữ(store)làđượcphéptruy nhậptrựctiếpbộnhớ. B‐1:SosánhđặcđiểmcủaCISCvàRISC CISC RISC Bấtkỳlệnhnàocũngcóthểtham chiếutớibộnhớ Chỉ có các lệnh Nạp (Load) hoặc Lưu trữ (Store) là có thể thamchiếutớibộnhớ Tồntạinhiềulệnhvàkiểuđịachỉ Tồntạiítlệnhvàkiểuđịachỉ Khuôndạnglệnhđadạng Khuôndạnglệnhcốđịnh Chỉcómộttậpthanhghi Cónhiềutậpthanhghi Các lệnh thực hiện trong nhiều nhịpchukỳ Các lệnh thực hiện trong một nhịpchukỳ Có một chương trình nhỏ để thôngdịchlệnh Lệnhđược thực hiện trực tiếp ngaybởiphầncứng Chương trình thông dịch lệnh phứctạp Chương trình biên dịch mã nguồnphứctạp Khônghỗtrợcơchếpipeline Hỗtrợcơchếpipeline Kíchthướcmãchươngtrìnhnhỏ gọn Kíchthướcmãchươngtrìnhlớn http://www.ebook.edu.vn 57 3.3.2 Định dạng lệnh  Hình3‐4:ĐịnhdạnglệnhMIPS   Hình3‐5:Phânloạicácphépthựcthilệnh 3.3.3 Các kiểu truyền địa chỉ toán tử lệnh Cáckiểuđánh/truyềnđịachỉchophépchúngtachỉra/truyềntoántửthamgiatrong cáclệnhthựcthi.Kiểuđịachỉcóthểchỉralàm ộthằngsố,môtthanhghihoặcmộtkhu vựcc ụthểtrongbộnhớ.Mộtsốkiểuđánhđịachỉchophépsửdụngđịachỉngắnvà mộtsốloạithìchophépchúngtaxácđịnhkhuvựcchứatoántửlệnh,vàthườngđược 58 gọilàđịachỉhiệudụngcủatoántửvàthườnglàđộng.Chúngtasẽxétmộtsốloạihình đánhđịachỉcơbảnhiệnđangđượcsửdụngrộngrãitrongcơchếthực hiệnlệnh.  Đánhđịachỉtứcthì(ImmediateAddressing) Phươngphápnàychophéptruyềngiátrịtoántửlệnhmộtcáchtứcthìnhưmộtphần củacâulệnhđượcthựcthi.Vídụ nếusửdụngkiểuđánhđịachỉtứcthờichocâulệnh Load0x0008thìgiátrị0x0008sẽđượcnạpngayvàoAC.Trườngbitthườngdùngđể chứatoántửlệnhsẽchứagiátrịthựcc ủatoántửchứkhôngphảiđịachỉcủatoántử cầntruyềncholệnhthựcthi.Kiểuđịachỉtứcthờichophépthựcthilệnhrấtnhanhvì khôngphảithựchiệntruy xuấtbộnhớđểnạpgiátrịtoántửmàgiátrịtoántửđãđược gộpnhưmộtphầntrongcâulệnhvàcóthểthựcthingay.Vìtoántửthamgianhưmột phầncốđịnhcủachương trìnhvìvậykiểuđánhđịachỉnàychỉphùhợpvớicáctoántử hằngvàbiếttrướctạithờiđiểmthựchiệnchươngtrình,hayđãxácđịnhtạithờiđiểm biên dịchchươngtrình.  Đánhđịachỉtrựctiếp(DirectAddressing) Phươngphápnàychophéptruyềntoántửlệnhthôngquađịachỉtrựctiếpchứatoántử đótrongbộnhớ.Vídụnếus ửdụngcơchếđánhđịachỉtoántửtrựctiếpthìtrongcâu lệnhLoad0x0008sẽđượchiểulàdữliệuhaytoántửđượcnạptrongcâulệnhnàynằm trongbộnhớtạiđịachỉ0x0008.Cơ chếđánhđịachỉtrựctiếpcũngthuộcloạihìnhkhá nhanhmặcdùkhôngnhanhđượcnhưcơchếtruyềnđịachỉtứcthờinhưngđộmềm dẻocaohơnvìđịachỉcủatoántửkhông nằmtrongphầnmãlệnhvàgiátrịcóthểthay đổitrongquátrìnhthựcthichươngtrình.  Đánhđịachỉthanhghi(RegisterAddressing) Trongcáchđánhđịachỉvàtruyềntoántửnàythìtoántửkhôngnằ mtrongbộnhớnhư trườnghợpđánhđịachỉtrựctiếpmànằmtạichínhtrongthanhghi.Khitoántửđã đượcnạpvàothanhghithìviệcthựchiệncóthểrấtnhanhvìtốcđộ truyxuấtthanhghi nhanhhơnsovớibộnhớ.Nhưngsốlượngthanhghichỉcóhạnvàphảiđượcchiasẻ trongquátrìnhthựchiệnchươngtrìnhvìvậycáctoántửphảiđượcn ạpvàothanhghi trướckhinóđượcthựcthi.  Đánhđịachỉgiántiếp(IndirectAddressing) Trongphươngpháptruyềntoántửnày,trườngtoántửtrongcâulệnhđượcsửdụngđể thamchiếutớimột contrỏnằmtrongbộnhớđểtrỏtớiđịachỉhiệudụngcủatoántử. Cơchếtruyềnnàycóthểnóilàmềmdẻonhấtsovớicáccơchếtruyềnđịachỉkhác trongquátrình thựcthichươngtrình.Vídụnếuápdụngcơchếtruyềnđịachỉgiántiếp trongcâulệnhLoad0x0008thìsẽđượchiểulàgiátrịdữliệucóđịachỉtại0x0008thực chấtlàch ứađịachỉhiệudụngcủatoántửcầntruyềnchocâulệnh.Giảthiếttạivịtríô nhớ0x0008đangch ứa giátrị 0x02A0thì0x02A0chínhlà giátrịthựccủatoán tửsẽ đượcn ạpvàoAC.Mộtbiếnthểkháccũngcóthểthựchiệntheocơchếnàylàtruyền thamchiếutớicontrỏnằmtrongkhuvựcthanhghi.Cơchếnàycònđượcbiếttớivới têngọilàđánhđịachỉgiántiếpthanhghi.Vídụm ộtcâulệnhLoadR1sửdụngc ơchế http://www.ebook.edu.vn 59 truyềnđịachỉgiántiếpthanhghithìchúngtacóthểdễdàngthôngdịchđượctoántử truyềntrongcâulệnhnàycóđịachỉhiệudụngnằmtrongthanhghiR1.  Cáchđánhđịachỉcơsở vàchỉsố(IndexedandBasedAddressing) Trongcơchếnàyngườitasửdụngmộtthanhghiđểchứaoffset(độchênhlệchtương đối)màsẽđượccộngvớitoántửđểtạoramộtđịachỉhiệu dụng.Vídụ,nếutoántửX củalệnhLoadXđượcđánhđịachỉtheocơchếđịachỉchỉsốvàthanhghiR1làthanh ghichứachỉsốvàcógiátrịlà1thìđịachỉhiệudụ ngcủatoántửthựcchấtsẽlàX+1.Cơ chếđánhđịachỉcơsởcũnggiốngnhưvậyngoạitrừmộtđiềulàthayvìsửdụngthanh ghiđịachỉoffsetthìởđâysửdụngthanhghi địachỉcơsở.Vềmặtlýthuyếtsựkhác nhaugiữahaicơchếthamchiếu địachỉnàylàchúngđượcsửdụngthếnàochứkhông phảicáctoántửđượctínhtoánthểnào.Mộtthanhghichỉ sốsẽlưuchỉsốmàsẽđược sửdụngnhưmộtoffsetsovớiđịachỉđượcđưaratrongtrườngđịachỉcủalệnhthực thi.Thanhghic ơsởlưumộtđịachỉcơsởvàtrường địachỉtrongcâulệnhthựcthisẽ lưugiátrịdịchchuyểntừđịachỉnày.Haicơchếthamchiếuđịachỉnàyrấthữuích trongviệctruyxuấtvớicácphầntửkiểu mảng.Tuỳthuộcvàothiếtkếtậplệnhcác thanhghimụcđíchchungthườnghayđượcsửdụngtrongcơchếđánhđịachỉnày.  Đánhđịachỉngănxếp(StackAddressing) Trongcơchếtruyềnđị achỉnàythìtoántửnhậnđượctừđỉnhngănxếp.Thayvìsử dụngthanhghimục đíchchunghayônhớkiếntrúcdựatrênngănxếplưucáctoántử trênđỉnhcủangănx ếp,vàcóthểtruyxuấtvớiCPU.Kiếntrúcnàykhôngchỉhiệuquả trongviệclưugiữcácgiátrịtrunggiantrongcácphéptínhphứctạpmàcòncungcấp mộtphươngpháphiệu quảtrongviệctruyềncácthamsốtrongcáclờigọihàmcũng nhưđểlưucấtcáccấutrúcdữliệucụcbộvàđịnhnghĩaraphạmvitồntạicủacácbiến và cáchàmcon.Trongcáccấutrúclệnhtruyềntoántửdựatrênngănxếp,hầuhếtcác lệnhchỉbaogồmphầnmã,tuynhiêncũngcómộtsốlệnhđặcbiệtchỉcó mộttoántửví dụnhưlệnhcấtvào(push)hoặclấyra(pop)từngănxếp.Chỉcómộtsốlệnhyêucầuhai toántửthìhaigiátrịchứatrong2ônhớtrênđỉnh ngănxếpsẽđượcsửdụng.Vídụ nhưlệnhAdd,CPUlấyrakhỏingănxếphaiphầntửn ằmtrênđỉnhrồithựchiệnphép cộngvàsauđólưukếtquả trởlạiđỉnhngănxếp.  Cáccáchđánhđịachỉkhác Córấtnhiềubiếnthểtạobởicáccơchếđánhđịachỉgiớithiệuởtrên.Đólàsựtổhợp trongviệctạora hoặcxácđịnhđịachỉhiệudụngcủato ántửtruyềncholệnhthựcthi. Vídụnhưcơchếđánhđịachỉchỉsốgiántiếpsửdụngđồngthờicảhaicơch ếđánhđịa chỉđồngthời, tươngtựnhưvậycũngcócơchếđánhđịachỉcơsở/offset…Cũngcómột sốcơchếtựđộngtănghoặcgiảmthanhghisửdụngtronglệnhđangthựcthinhờvậy màcó thểgiảmđượcđộlớncủamãchươngtrìnhđặcbiệtphùhợpchocácứngdụng Nhúng. 60 3.3.4 Nguyên lý thực hiện pipeline Vi xử lý cóthểthực thi các lệnh với một tốcđộrấtnhanh.RISC sử dụng kỹthuật pipelineđểtăngcườngtốcđộxửlýcáclệnhđồngthờinhờvàokhảnăngthựchiện xếp chồngcuốnchiếuliêntụccáclệnhtheocácphânđoạnthựchiệnlệnh.Vídụmộtlệnhcó thểđượcđọctừbộnhớtrongkhimộtlệnhkhácđangđượcgiảimãđể chuẩnbịđưavào xửlývàmộtlệnhkhácthìđangđượcthựchiện.CũngcómộtsốVĐKcótêngọilàmáy tínhtậplệnhđặcbiệtSISC(SpecificInstructionSetComputer)vìchúngđược pháttriển dựatrêntậplệnhđượcthiếtkếđặcchủngchomụcđíchđiềukhiển.   Hình3‐6:Nguyênlýthựchiệnpipeline Pipelineđượcthựchiệndựatrênnguyênlýxếpchồngcuốnchiếucácphânđoạntrong mỗimộtlệnh. Thôngthườngmỗi mộtlệnhđượcchia ralàmnhiềuphânđoạnthực hi ện,phổbiếnhiệnnaylà5phânđoạntuầntựnhưsau: (1) Trỏlệnh(InstructionFetch):Thựchiệntrỏtớilệnhthựchiệnbằngcáchđọcđịa chỉlệnhtừthanhghicontrỏ lệnh(PC),đọclệnhđóratừbộnhớchươngtrìnhvà tínhtoánrồinạpgiátrịmớivàotrongthanhghicontrỏlệnhđểtrỏtớilệnhsẽ thựcthitiếptheo. (2) Giảimãlệnh (Decode):Thựchiệnthôngdịchvàchuyểnđổimãlệnhthànhdạng mãđểALUcóthểhiểuvàchuẩnbịthựcthi.Quátrìnhnàythựcchấtlàquátrình đọcvàchuyểnđổinộidung trongcácthanhghichươngtrình. (3) Thựchiệnl ệnh(Execute):ALUthựcthilệnhvừađượcgiảimã. (4) Truynhậpbộnhớdữliệu(Memory):Đọcrahoặcviếtvàobộnhớdữliệ unếu lệnhthựchiệncónhucầunày. (5) Viếttrởlại(Writeback):Hoànthànhvàcậpnhậtnộidungcácthanhghi.  Chúngtacầnphânbiệtc ơchếpipelinevàcơchếthự chiệnsongsongmặcdùcảhaiđều nhằmđápứngyêucầuthựcthicạnhtranhvàtăngtốcđộthựcthi. Cơchếpipelinegiải quyếtvầnđềcạnhtranhvàtăngtốcđộthực hiệnbằngcáchchianhỏtínhtoánthành cácbướcnhỏtrongkhiđócơchếsongsongsẽsửdụngnhiềunguồntàinguyênđộclập đểthựchiện. http://www.ebook.edu.vn 61  Hình3‐7:Quátrìnhthựchiệnlệnhtheonguyênlýpipeline 3.3.5 Harzard Trongcơchếthựchiệnlệnhpipelinethểhiệnrõđượcưuđiểmtrongviệcthúcđẩyhiệu suấtthựchiệnlệnh,tuynhiêncóthểxảyrahiệntượngthựcthisaidosựthi ếuđồngbộ vàphụthuộclẫnnhaugiữacáclệnhtrongnhómthựcthipipeline.   Hazarddữliệu Hiệntượngharzardxảyrakhicósựphụthuộclẫngiữacáclệnhnằm trongkhoảngxếp chồngthựchiệncuốnchiếutheonguyênlýpipeline.Điềunàycóthểdễdànghìnhdung khihaihoặcnhiềulệnhthựchiệnxếpchồngkhicónhucầuđọc giátrịcủacùngmột toántử.Dosựphụthuộcnhưvậynênkhiviếtchươngtrìnhchúngtaphảikiểmsoát đượcthứtựchươngtrìnhmàcáclệnhsẽđượcthựchiệnnhưthế nào.Mụcđíchcủaviệc thựcthilàlàmsaođểhỗtrợđượccơchếthựchiệnsongsongvàtăngđượchiệusuất 62 thựcthichươngtrình.Việcpháthiệnvàtránhđượchiệntượnghazardlàcầnthiếtđể đảmbảochươngtrìnhđượcthựcthiđúng.Tuỳtheonguyênnhângâyrahazardngười taphânra3loạ ihìnhchínhtuỳthuộcvàothứtựđọchoặcviếttruynhậplệnhcủacác nhómlệnhphụthuộcnhautrongcơchếthựchiệnsongsong.  Xéthailệnhivàjtrongđólệnhiđược thựchiệntrướclệnhjtrongchươngtrình.Hiện tượngHazarddữliệucóthểxảyranhưsau: ‐RAW(readafterwrite):Đọcsaukhiviết Khilệnhivàjđềucầnsửdụng vàtraođổithôngtinvớicùngmộtgiátrịônhớ,trong đólệnhicầnphảithựchiệnxongvàcậpnhậtgiátrịvàoônhớđórồilệnhjmớicóthể đọ cvàsửdụng.Nếulệnhichưathựchiệnxongmàlệnhjđãđọcgiátrịônhớđóthìsẽ xảyrahiệntượngđượcgọilàhazarddữliệu.Lệnhjđọcthôngtin từmộtônhớtrước khilệnhikịpviếtvàovìvậylệnhjsẽchỉđọcđượcgiátrịc ũchứkhôngphảigiátrịmới cầnphảisửdụng.Trongcơchếthựchiệ npipeline5phânđoạnsẽgặpphảihiệntượng hzarddữliệukhicómộtlệnhnạp(load)theosaumộtlệnhALUsốnguyênvàsửdụng trựctiếpkếtquảnạp. ‐ WAW(writeafterwrite):Viếtsaukhiviết Lệnhjviếtvàomộttoántửtrướckhilệnhiviếtvào.Màyêucầuthựcthiđúngchương trìnhlàlệnhiphảiviếttrước lệnhjvàgiátrịcuốicùnglưutrongtoántửphảidolệnhj đưarachứkhôngphảilệnhi.Hiệntượngnàyđượcgọilàhazarddữliệukhicósựphụ thuộcđầura vànhiềulệnhcùngcónhucầutruynhậpviếtvàocùngmộtbiếnhaymột ônhớ. ‐WAR(writeafterread):Viếtsaukhiđọc jviếtvàotoántửđíchtrướckhinóđượcđọc bởilệnhidođólệnhIsẽnhậnđượcgiátrị sai.HiệntượngHazardnàyxuấthiệnkhicósựphụthuộctoánhạngtrongcácphép tính  Hazarddosựphụthuộcđiềukhiể n Kiểuphụthuộccũngkhá phổbiếnlàdocấutrúcđiềukhiển.Sựphụthuộcđiềukhiển đượcquyếtđịnhtrìnhtựthựcthicủamộtlệnhitheolệnhrẽnhánhđả mbảosaochonó đượcthực thiđúngnhưthứtựmongmuốn.Tấtcảcáclệnhngoạitrừkhốicơbảnđầu tiêncủachươngtrìnhđềuđượcđiềukhiểntheocấutrúclệnh rẽnhánhvàphảiđược đảmbảođểthựcthiđúngtheothứtự.Mộtvídụđơngiảnnhấtvềsựphụthuộcđiều khiển là sự phụ thuộcđiều khiển theo cấu trúc if…then…Phần  thực thi trong phần “then”sẽphụthuộccâulệnhđiềukiệnif.Vídụđoạnmãchươngtrìnhminhhọanhư sau:         if (p1) { S1; } if (p2) { S2; } http://www.ebook.edu.vn 63 Câulệnhđượcđiềukhiểnphụthuộcvàop1vàS2đượcđiềukhiểnphụthuộcp2chứ khôngphảip1.  Nóichung,có2ràngbuộccóthểgiảthiếttrongsựphụthuộcđiềukhiể n: (1) Một lệnh thực hiện phụ được quyếtđịnh bởi một lệnhđiều khiển rẽ nhánh thì khôngthểđượcphépchuyểnlêntrướccâulệnhthựchiệnkiểmtrađiềukiện. Vídụ chúngtakhôngthểđưalệnhtừphần thenlêntrướcphầnif. (2)Mộtlệnhthựchiệnđộclậpvàkhôngphụthuộcvàolệnhrẽnhánhkhôngthểđược chuyểnvàokhuvựcsauphầnthựchiệncủanhánhthựchiệnphụthuộc.Víd ụkhông thểđưamộtlệnhlêntrướcphầnlệnh ifvàchuyểnnóvàotrongphầnthen.  Sựphụthuộcđiềukhiểnphảiđượcđảmbảobởi2thuộctínhtrongcơchếpipelineđơn giản.Thứ nhất,cáclệnhthựchiệntrongchươngtrìnhphảiđúngtheo trìnhtựđược điề ukhiểncủanó.Trìnhtựnàyphảiđượcđảmbảorằngmộtlệnhmàphảithựcthi trướcmộtnhánhđiềukhiểnthìphảithựchiệntrướcnhánhđó.Thứhai,việc pháthiện rasựxungđộtvềđiềukhiển(controlhazard)sẽđảmbảorằngmộtlệnhmàđượcđiều khiểnphụthuộcvàomộtnhánhthìkhôngđượcthựchiệnchừngnàohướng thựchiện củanhánhđórõràng.Bảođảmđượcsựphụthuộcđiềukhiểnlàcầnthiếtvàcũnglà mộtcáchđơngiảnđểđảmbảođúngtrìnhtựthựchiệnchươngtrình.S ựphụthuộc điềukhiểnkhôngphảilàmộtsựhạnchếcơbảnvềkhảnăngthựcthichươngtrình. Chúngtacóthểsẵnsàngthựcthithêmnhữnglệnhmàlẽrakhôngnên đượcthựcthi nếuchúngkhônggâyảnhhưởnggìđếntínhđúngđắncủachươngtrình,nếukhôngsự xungđộtgâyrabởisựphụthuộcđiềukhiểncóthểxảyra.Sựphụthuộcvềđ iềukhiển khôngphảilà mộtthuộctínhkịchtínhbắtbuộcphảibảođảm.Thayvìđiềuđó,hai thuộctínhkịchtínhchoviệclậptrìnhmộtcáchđúngđắnvàthường đượcbảođảmlà phảitránhđượcxungđộtbởicảsựphụthuộcvềdữliệuvàđiềukhiểnvàđóchínhlà hànhvingoạilệcóthểxảyratrongluồngdữliệuthựcthi chươngtrình.  3.4 Ngôn ngữ và môi trường phát triển 3.4.1 Ngôn ngữ Mộttrongnhữngngônngữlậptrìnhcólẽphổcậprộngrãinhấthiệnnaylàngônngữ C.SovớibấtkỳngônngữlậptrìnhnàokhácđangtồntạiCthựcsựphùh ợpvàtrở thànhmộtngônngữpháttriểncủahệnhúng.Điềunàykhôngphảilàcốhữuvàsẽtồn tạimãi,nhưngtạithờiđiểmnàythìCcólẽlàmộtngônngữ gầngũinhấtđểtrởthành mộtchuẩnngônngữtrongthếgiớihệnhúng.Trongphầnnàychúngtasẽcùngtìm hiểutạisaoClạitrởthànhmộtngônngữphổbiếnđếnvậyvàt ạisaochúngtalựachọn nónhưmộtngônngữminhhọachoviệclậptrìnhhệnhúng.  Sựthànhcôngvềpháttriểnphầnmềmthườnglànhờvàosựlựachọnngônngữphù hợ pnhấtchomộtdựánđặtra.Cầnphảitìmmộtngônngữđểcóthểđápứngđượcyêu cầulậptrìnhchocácbộxửlýtừ8‐bitđến64‐bit ,trongcáchệthốngchỉcóhữu hạnvề 64 bộnhớvàiKbytehoặcMbyte.Chotớinay,điềunàychỉcóClàthựcsựcóthểthỏamãn vàphùhợpnhất.  RõràngCcómộtsốưuđiểmnổibậttiêubiểu nhưkhánhỏvàdễdàngchoviệchọc,các chươngtrìnhbiêndịchthườngkhásẵnchohầuhếtcácbộxửlýđangsửdụnghiệnnay, vàcórấtnhiềungườiđãbiết vàlàmchủđượcngônngữnàyrồi,haynóicáchkháccũng đãđượcphổcậptừlâu.HơnnữaC cólợithếlàkhôngphụthuộcvàobộxửlýthựcthi mãnguồn.Ngườilậ ptrìnhchỉphảitậptrungchủyếuvàoviệcxâydựngthuậttoán, ứngdụngvàthểhiệnbằngngônngữthânthiệnthayvìphảitìmhiểusâuvềkiếnthức phầncứ ng,cũng nhưrất nhiềucácưuđiểmnổibật kháccủa ngônngữ bậccao nói chung.  CólẽmộtthếmạnhlớnnhấtcủaClàmộtngônngữbậccaomứcth ấpnhất.Tứclàvới ngônngữCchúngtavẫncóthểđiềukhiểnvàtruynhậptrựctiếpphầncứngkháthuận tiệnmàkhônghềphảihysinhhayđánhđổibất kỳmộtthếmạnhnàocủangônngữbậc cao.Thựcchấtđâycũnglàmộttrongnhữngtiêuchíxâydựngcủanhữngngườisáng lậprangônngữCmuốnhướngtớ i.Thựctếđiềunàyđãđượcđềcậpđếnkhihainhà sánglậprangônngữC,KernighanvàRitchieđãđưavàotrongphầngiớithiệucủa cuốnsáchcủahọ“TheCProgrammingLanguage”nhưsau:  “Cisarelatively“lowlevel”language.Thischaracterizationisnotpejorative;itsimplymeans thatCdealswiththesamesortofobjectsthatmostcomputersdo.Thesemaybecombinedand movedaboutwiththearithmeticandlogicaloperatorsimplementedbyrealmachines…”  TấtnhiênlàC khôngphảilàngônngữduynhấtchocácnhàlậptrìnhnhúng.Ítnhất hiệnnayngườitacũngcóthểbiếttớingoàingônngữClàAssembly,C++,vàAda.  Trongnhữngbuổiđầupháttriể nhệnhúngthìngônngữAssemblychủyếuđượcsử dụngchocácvixửlýđích.Vớingônngữnàychophépngườilậptrìnhđiềukhiểnvà kiểmsoáthoàntoànvixửlýcũngnhưphầnc ứnghệthốngtrongviệcthựcthichương trình.TuynhiênngônngữAssemblycónhiềunhượcđiểmmàcũngchínhlàlýdotại sao hiện nay nó ítđược phổ cập và sử dụng.Đó là,  việc học và sử dụng ngôn ngữ Assemblyrấtkhókhănvàđặcbiệtkhókhăntrongviệcpháttriểncácchươngtrìnhứng dụnglớnphứctạp.Hiênnaynóchỉđượcsửdụng chủyếunhưđiểmnốigiữangônngữ bậccaovàbậcthấpvàđượcsửdụngkhicóyêucầuđặcbiệtvềhiệusuấtthựchiệnvà tốiưuvềtốcđộmà khôngthểđạtđượcbằngngônngữkhác.NgônngữAssemblychỉ thựcsựphùhợpchonhữngngườicókinhnghiệmvàhiểubiếttốtvềcấutrúcphầncứng đíchcũngnhưnguyênlýthự chiệncủabộlệnhvàchípxửlý.  C++làmộtngônngữkếthừatừCđểnhằmvàocáclớpứngdụngvàtưduylậptrình hướngđốitượngvàcũngbắtđầuchiếm đượcsốlượnglớnquantâmtrongviệcứng dụngchopháttriểnhệnhúng.TấtcảcácđặcđiểmcốtlõicủaCvẫnđượckếthừahoàn toàntrongngônngữC++vàngoàiracònhỗ trợkhảnăngmớivềtrừutượnghóadữliệu vàphùhợpvớitưduylậptrìnhhiệnđại;hướngđốitượng.Tuynhiênđiềunàybịđánh http://www.ebook.edu.vn 65 đổi bởi hiệu suất và thời gian thực thi dođó chỉ phù hợp với các dự án phát triển chươngtrìnhlớnvàkhôngchịusứcéplớnvềthờigianthựcthi.   Adacũnglàmộtngônngữhướngđốitượngmặcdùnókhôngđượcphổcậprộngrãi nhưC++.AdađượcxâydựngbởicơquanquốcphòngMỹđểphụcvụpháttriểncác phầnm ềmquânsựchuyêndụngđặcbiệt.Mặcdùcũngđãđượcchuẩnhóaquốctế (Ada83vàAda95)nhưngnóvẫnkhôngđượcphổcậprộngrãingoàiviệcứngdụngchủ yếutrongcáclĩ nhvựcquânsựvàhàngkhôngvũtrụ.Vànócũngdầndầnbịmấtưu thếvàsựphổcậptrongthờigiangầnđây,đâycũnglàmộtđiềuđángtiếcvìbảnthân  Adacũnglàmộtngônngữcónhiềuđặcđi ểmphùhợpchoviệcpháttriểnphầnmềm hệnhúngthayvìphảisửdụngC++. 3.4.2 Biên dịch   Hình3‐8:Quátrìnhpháttriểnvàbiêndịchphầnmềmnhúng  Quátrìnhbiêndịch(Compiling) Nhiệmvụchínhcủabộbiêndịchlàchuyểnđổichươngtrìnhđượcviếtbằngngônngữ thânthiệnvớiconngườivídụnhưC,C++,…thànhtậpmãlệnht ươngđươngcóthểđọc vàhiểubởibộvixửlýđích.Theocáchhiểunàythìbảnchấtmộtbộhợpngữcũnglà mộtbộbiêndịchđểchuyểnđổimột‐mộttừmột dònglệnhhợpngữthànhmộtdạng mãlệnh tươngđươngcho bộvi xửlýcó thểhiểu vàthựcthi.Chínhvìvậyđôi khi ngườitavẫnnhầmhiểugiữakháiniệmb ộhợpngữvàbộbiêndịch.Tuynhiênviệc biêndịchcủabộhợpngữsẽđượcthựcthiđơngiảnhơnrấtnhiềusovớicácbộbiên dịchchocácmãnguồnviết bằngngônngữbậccaokhác.  Mỗimộtbộxửlýthườngcóriêngngônngữmáyvìvậycầnphảichọnlựamộtbộbiên dịchphùhợpđểcóthểchuyểnđổichínhxácthành dạngmãmáytươngứngvớib ộxử lýđích.Đốivớicáchệthốngnhúng,bộbiêndịchlàmộtchươngtrìnhứngdụngluôn 66 đượcthựcthitrênmáychủ(môitrườngpháttriểnchươngtrình)vàcòncótêngọilàbộ biêndịchchéo(cross‐compiler).Vìbộbiêndịchchạytrênmộtnềnphầncứngđểtạo ra mãchươngtrìnhchạytrênmôitrườngphầncứngkhác.Việcsửdụngbộbiêndịchchéo nàylàmộtthànhphầnkhôngthểthiếutrongquátrìnhpháttriểnphầnmềmchohệ nhúng.Các bộbiêndịchchéothườngcóthểcấuhìnhđểthựcthiviệcchuyểnđổicho nhiềunềnphầncứngkhácnhaumộtcáchlinhhoạt.Vàviệclựachọncấuhìnhbiêndịch tươngứngvớicácnềnphầncứngđôikhicũngkháđộclậpvớichươngtrìnhứngdụng củabộbiêndịch.  Kếtquảđầutiêncủaquátrìnhbiêndịchnhậnđượclà mộtdạngmãlệnhđượcbiếttới vớitêngọilàtệpđốitượng(objectfile).Nộidungcủatệpđốitượngnàycóthểđược xemnhưlàmộtcấutrúcdữliệu trunggianvàthườngđượcđịnhnghĩanhưm ộtđịnh dạngchuẩnCOFF(CommonObjectFileFormat)hayđịnhdạngcủabộliênkếtmởrộng ELF (Extended Linker Format)… Nếu sử dụng nhiều bộ biên dịch cho các modul mã nguồncủamộtchươngtrìnhlớnthìcầnphảiđảmbảorằngcáctệpđốitượngđượctạo raphảicóchungmộtkiểuđịnhdạng.  Hầuh ếtnộidungcủacáctệpđốitượngđềubắtđầubởimộtphầnheaderđểmôtảcác phầntheosau.Mỗimộtphầnsẽchứamộthoặcnhiềukhốimãhoặc dữliệunhưđược sửdụngtrongtệpmãnguồn.Tuynhiêncáckhốiđóđượcnhómlạibởibộbiêndịchvào trongcácphầnliênquan.Vídụnhưtấtcảcáckhốimãđượcnhómlại vàotrongmột phầnđượcgọilàtext,cácbiếntoàncụcđãđượckhởitạo(cùngcácgiátrịkhởitạocủa chúng)vàotrongphầndữliệu,vàcácbiếntoàncụcchưa đượckhởitạovàotrongphần bss.  Cũngkháphổbiếnthườngcómộtbảngbiểutượngchứatrongnộidungcủatệpđối tượng.Nóchứatênvàđịachỉcủatấ tcảcácbiếnvàhàmđượcthamchiếutrongtệpmã nguồn.Cácphầnchứatrongbảngnàykhôngphảilúcnàocũngđầyđủvìcómộtsố biếnvàhàmđượcđịnhng hĩavàchứatrong cáctệpmãnguồnkhác.Chínhvìvậycần phảicóbộliênkếtđểthựcthixửlývấnđềnày.   Quátrìnhliênkết(Linking) Tấtcảcáctệpđối tượngnhậnđượcsaub ướcthựchiệnbiêndịchđầutiênđềuphải đượctổhợplạitheomộtcáchđặcbiệttrướckhinóđượcnạpvàchạyởtrênmôitrường phầncứngđích.Nhưđãthấyởtrên, bảnthâncáctệpđốitượngcũngcóthểlàchưa hoànthiệnvìvậybộliênkếtphảixửlýđểtổhợpcáctệpđốitượngđóvớinhauvà hoànthiện nốtphầ ncònkhuyếtchocácbiếnhoặchàmthamchiếu liênthônggiữacác tệpmãnguồnđượcbiêndịchđộclập.  Kếtquảđầuracủabộliênkếtlàmộttệpđốitượngm ớicóchứatấtcảmãvàdữliệu trongtệpmãnguồnvàcùngkiểuđịnhdạngtệp.Nóthựcthiđượcđiềunàybằngcáchtổ hợpmộtcáchtươngứngcácphần text,dữliệuvàphầnbss…từcáctệpđầuvàovàtạo ramộttệpđốitượngtheođịnhdạngmãmáythốngnhất.Trongqúatrìnhbộliênkết thựchiệntổhợpcác phầnnộidungtươngứngnócònthựchiệnthêmcảvấnđềhoàn [...]... liệu.  Nếu  chúng  ta  không  phải  là  đang  phát  triển  phần mềm  cho  hệ nhúng thì  quá trình biên dịch có thể kết thúc tại đây. Tuy nhiên, với hệ nhúng ngay cả hệ thống nhúng đã  bao  gồm  cả  hệ điều hành  chúng  ta  vẫn  cần  phải  có  một  mã  chương  trình  (image) nhị phân được định vị tuyệt đối.  Thực tế nếu có một hệ điều hành thì phần mã  và  dữ  liệu  cũng  thường  gộp  cả  vào  bên ... thực  của  hệ thống.      Hệ thống phát triển (software in the loop)  71      Hệ thống này sử dụng nền phần cứng nhúng đích thực với đối tượng thực. Tuy nhiên có  sự hỗ trợ của công cụ phát triển để có thể cài đặt và thử nghiệm trực tiếp trên nền phần cứng thực. Đây là một dạng mô hình cho kết quả trung thực và chính xác nhất trong các  dạng hệ thống phát triển nêu trên. Tuy nhiên các nền phần cứng này thường được phát ... bộ nhớ và thiết lập các điểm dừng khi thực hiện chạy chương trình.  3. 4.5 Thiết kế hệ thống bằng máy tính     Hệ thống này mô phỏng nền phần cứng thực trên PC cho đáp ứng hành vi giống như với  vi mạch cứng thực và mô hình đối tượng được mô hình thực thi trên PC. Loại hệ thống này  cũng  tương  tự  như  hệ thống mô  phỏng  offline  tuy  nhiên  có  ưu  điểm  hơn  vì  khả  năng mô phỏng  hành vi và đáp ứng của vi mạch nhúng chính xác hơn và trung thực ... của đối tượng. Rút ngắt và đơn giản hóa công việc xây dựng đối tượng.     Mô hình phát triển thực      Trong hệ thống phát triển này nền phần cứng nhúng đích được mô phỏng bằng mô hình  chạy trên PC và đối tượng điều khiển cũng là mô hình mô phỏng chạy trên PC. Vì vậy  quá  trình  phát  triển  thực  chất  là  quá  trình  chạy  mô  phỏng  hệ thống được  thực  hiện  hoàn  toàn  trên  PC.  Với  hệ thống này  không  thể  thử  nghiệm  cho  các  sự  kiện ... dụng, còn với chương trình phát triển chạy trên hệ nhúng thì việc này phải được thực  hiện bởi bộ định vị. Đây cũng chính là điểm khác biệt cơ bản khi thực  hiện biên dịch  một chương trình ứng dụng cho hệ nhúng.     Thông tin về bộ nhớ vật lý của hệ thống phần cứng phát triển mà cần phải cung cấp cho  bộ định vị GNU phải được định dạng theo kiểu biểu diễn của bộ liên kết. Thông tin này  đôi  khi  được  sử  dụng  để  điều khiển một ... chương trình nhị phân này chỉ chứa giá trị zero và chỉ có nửa phần cao được sử dụng là  chủ yếu.     69    Hình 3 9: Ví dụ về một lưu đồ phát triển phần mềm cho DSP TMS320Cxx  3. 4 .3 Simulator Simulator là một chương trình phần mềm cho phép người phát triển mã chương trình  chạy  mô  phỏng  một  chương  trình  viết  cho  một  nền  VXL/VĐK  (nền  phần cứng  đích)  trên một môi trường phần cứng khác (hay còn gọi là môi trường phát triển). Thực chất ... phân có thể được nạp trực tiếp và chạy được trên nền phần cứng hệ nhúng đích, tức là  được  nạp  vào  bộ  nhớ  chương  trình  của  hệ thống đích.  Trong  ví  dụ  trên  mã  chương  trình nhị phân được tạo ra có dung lượng chính xác là 1MB. Tuy nhiên bởi vì các giá trị  cho  phần dữ  liệu  được  khởi  tạo  nằm  trong  ROM  nên  nửa  phần thấp  512KB  của  mã  chương trình nhị phân này chỉ chứa giá trị zero và chỉ có nửa phần cao được sử dụng là ... Trong nhiều trường hợp bộ định vị là một chương trình khá độc lập với các phần công  cụ khác trong hệ thống phần mềm phát triển. Tuy nhiên trong các bộ công cụ phát triển  GNU chức năng này được tích hợp luôn trong bộ liên kết. Tuy nhiên không nên nhầm  lẫn về chức năng của chúng trong quá trình thực thi biên dịch. Thông thường chương  trình chạy trên các máy tính mục đích chung thì hệ điều hành sẽ thực hiện việc chuyển  đổi và gán chính xác địa chỉ thực cho các phần mã và dữ liệu trong chương trình ứng ... Mô phỏng thời gian thực (Hardware in the Loop)          Trong  quá  trình  phát  triển  phần mềm  cần  phải  được  thử  nghiệm  với  đối  tượng  điều khiển.  Tuỳ thuộc vào từng môi trường phát triển chúng ta có thể tiến hành theo một số  các phương pháp sau.    Mô phỏng offline    Hệ thống này  sử  dụng  nền  phần cứng  nhúng đích  thực  nhưng  đối  tượng  thì  chỉ  là  mô  hình thời gian thực không phải đối tượng thực. Ưu điểm là khá mềm dẻo và thay đổi ... Đoạn mã này được cung cấp cho cho bộ định vị của bộ liên kết GNU về thông tin bộ  nhớ đã được cấu hình trên nền mạch cứng hệ nhúng đích và chỉ ra các phần dữ liệu và  bss sẽ được định vị trong RAM (bắt đầu tại địa chỉ 0x00000) và phần mã chương trình  sẽ được định vị trong ROM (bắt đầu tại địa chỉ 0x80000). Tuy nhiên các giá trị khởi tạo  trong các đoạn dữ liệu sẽ được thực hiện một phần trong ở ROM bắt đầu từ phần định  nghĩa của khu vực định vị cuối cùng trong mã chương trình.   . bA =⋅+⋅⋅⋅+⋅+⋅ =⋅+⋅⋅⋅+⋅+⋅ ⋅⋅+⋅⋅⋅+⋅⋅+⋅⋅   Nguyênlýthựchiệnphépnhâncũnggiốngnhưtathựchiệnphépnhânhaiđathức. Trongtrườnghợpnhânhaisốnhịphânthìmỗi phần tửlàmộtbit,bytehoặctừ.Ví dụ cụthểvớihaisốnhịphân4bittathuđượcphépnhânthựchiệnnhưsau:  32 10 32 10 32 10 32 10 32 10 30 20 10 00 432 1 31 21 11 01 5 432 32 22 12. http://www.ebook.edu.vn 55 đượcchỉcònlàsốdưvàthươngsố.Hìnhảnhvềbộnhớlưucácbiếnsốthựchiệntrong thuậttoánnàyđượcminhhoạnhưtrongHình 3 3.   Hình 3 3: Thựchiệnphépchia 3. 3 Tập lệnh 3. 3.1 Cấu trúc tập lệnh CISC và RISC Hầuhếtcácvi điều khiển vàVXL nhúng cócấutrúcđượcpháttriểndựatheokiếntrúc máytínhtậplệnhphứchợpCISC(ComplexInstructionSetComputer).CISClàmộtcấu trúcx ửlýcáclệnhphứchợp,tứclàmộtlệnhphứchợpsẽbaogồmmộtvàilệnhđơn. Theo. ểgặpphảikhichươngtrìnhs ử dụngcáchàmthuộcthưviệnCchuẩn.  Saukhiđãhợpnhấtthànhcôngtấtcảcácthành phần mãvà phần dữliệutươngứng cũngnhưcácvấnđềvềthamchiếutới cácbiểutượngchưađượcthựcthitrongquá trìnhbiêndịchđơnlẻ,bộliênkếtsẽtạoramộtbảnsaođặcbiệtcủachươngtrìnhcó khảnăngđịnhvịlại(relocatable). Haynóicáchkhác,chươngtrìnhđượchoànthiện ngoạitrừmột điều: Khôngcóđịachỉbộnhớnàochưađượcgánbêntrongcác phần mã vàdữliệu.Nếuchúngtakhôngphảilàđangpháttriể n phần mềmcho hệ nhúng thì quátrìnhbiêndịchcóthểkếtthúctạiđây.Tuynhiên,với hệ nhúng ngaycả hệ thống nhúng đãbaogồmcả hệ điều hành chúngta vẫncầnphải có mộtmã chươngtrình (image)nhịphânđượcđịnhvịtuyệtđối.Thựctếnếucómột hệ điều hànhthì phần mã vàdữ

Ngày đăng: 22/07/2014, 14:21

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan