Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 13 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
13
Dung lượng
0,96 MB
Nội dung
http://www.ebook.edu.vn 47 HầuhếtcácứngdụngđềucónhucầuvềbộnhớRAMonChipvìvậymộtsố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 (embeddedRAM). Cácphần tửRAMđóđược tổchứcthànhtừng khốivà tuỳ thuộcvàokiếntrúccủaFPGAnósẽđượcphânbốlinhhoạt,thườnglàxungquanhcác phầntửngoạivi hoặc phânbốđềutrênbềmặtChip.Mộthìnhảnhminhhoạvềphân bốRAMtrongkiếntrúcFPGAđượcmôtảnhưtrongHình2‐45. Hình2‐45:HìnhảnhcủaChipcócáccộtlàcáckhốiRAMnhúng ■FPGAvớihạtnhânDSP Thựcchấtđólàmộttổhợpnhằmtăngtốcvàkhảnăngtínhtoán.Kháiniệmnàycũng tươngtựnhưcácbộđồngxửlýtoánhọctrongkiế ntrúcmáytính.Nguyênlýlànhằm sansẻvàgiảmbớttảisangFPGAđểthựcthicácchứcnăngtínhtoánlớn(thôngthường đòihỏithựchiệntrongnhiềunhịphoạtđộng củaChipDSP)vàchophépChipDSPtập trungthựchiệncácchứcnăngđơnnhịptốiưu.TổhợpFPGAvàDSPlàm ộtkiếntrúc rấtlinhhoạtvàđặcbiệtcảithi ệnđượchiệusuấtthựchiệnvàtăngtốchơnrấtnhiềuso vớikiếntrúcnhiềuChipDPShoặcASICsđồngthờigiáthànhlạithấphơn. Hình2‐46:SơđồnguyênlýmạchghépnốiVĐKvà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ướngchứcnănghoáđặcthù 9 Hạnchếvềtàinguyênbộnhớ 9 Yêucầuthờigianthực 3.2 Biểu diễn số và dữ liệu Đơnvịcơbảnnhấttrongbiểudiễnthôngtincủahệthốngsốđượcgọilàbit, chínhlàkýhiệuviếttắtcủathuậtngữbi narydigit. 1964,IBMđãthiếtkếvàchếtạomáytínhsốsửdụngmộtnhóm8bitđểđánh địachỉbộnhớvàđịnhnghĩarathuậtngữ8bit=1byte. Ngàynaysửdụngrộngrãi thuậtngữwordlàmộttừdữliệudùngđểbiểudiễn kíchthướcdữliệumàđượcxửlýmộtcáchhiệuquảnhấtđốivớimỗiloạikiến trúcxửlýsốcụthể. Chínhvìvậymộttừcóthểlà16bits,32bits,hoặc64bits… Mỗimộtbytecóthểđượcchiarathànhhainửa4bitvàđượcgọilàcácnibble. Nibblechứacácbíttrọng sốlớnđượcgọilànibblebậccao,vànibblechứacácbit trọngsốnhỏđượcgọilànibblebậcthấp. 3.2.1 Các hệ thống cơ số Trongcáchệthốngbiểudiễnsốhiệnnayđềuđượcbiểudiễnởdạngtổngquátlàtổng luỹthừatheocơsố,vàđượcphânloạitheogiátrịcơsố.Mộtcáchtổngquát mộthệbiểu diễnsốcơsốbvàalàmộtsốnguyênnằmtrongkhoảnggiátrịcơsốbđượcbiểudiễ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ậpphân),c ơsốhexadecimal,cơsố8 Octal(bátphân). Vídụvềbiểudiễncácgiátrịtrongcáchệcơsốkhácnhau: 243.51 10=2x10 2 +4x10 1 +3x10 0 +5x10 ‐1 +1x10 ‐2 212 3=2x3 2 +1x3 1 +2x3 0 =2310 10110 2=1x2 4 +0x2 3 +1x2 2 +1x2 1 +0x2 0 =2210 Hailoạicơsốbiểudiễnthôngdụngnhấthiệnnaychocáchệthốngxửlýsốlàcơsốnhị phânvàcơsốmườisáu. 3.2.2 Số nguyên Trongbiểudiễnsốcódấuđểphânbiệtsốdươngvàsốâmngườitasửdụngbittrọngsố lớnnhấtquiướclàmbitdấuvàcácbitcònlạiđượcs ửdụngđểbiểudi ễngiátrịđộlớn củasố.Vídụmộttừ8bitđượcsửdụngđểbiểudiễngiátrị‐1sẽcódạngnhịphânlà 10000001,vàgiá trị+1sẽcódạng00000001.Nhưvậyvới mộttừ8bitcóthểbiểudiễn http://www.ebook.edu.vn 49 đượccácsốtrongphạmvitừ‐127đến+127.MộtcáchtổngquátmộttừNbitsẽbiểu diễnđược‐2 (N‐1) ‐1đến+2 (N‐1) ‐1. Chúýkhithựchiệncộnghaisốcódấu: 9 Nếuhais ốcùng dấuthìthựchiệnphépcộngphầnbiểudiễngiátrịvàsửdụngbit dấucùngdấuv ớihaisốđó. 9 Nếuhaisốkhácdấuthìkếtquảsẽnhậndấucủatoántửlớnhơn,vàthựchiện phéptrừgiữatoántửcógiátrịlớnhơnvớitoán tửbéhơn. Vídụ1:Cộnghaisốcódấu01001111 2và001000112. 1111 ⇐ carries 01001111 (79) 0+0100011 +(35) 01110010 (114) Vídụ2:Cộnghaisốcódấu01001111 2và011000112. Nhớcuốicùng 1 ← 1111 ⇐carries Tràn 0 1001111 (79) bỏnhớ 0+ 1100011 +(99) 0 0110010 (50) Vídụ3:Trừhaisốcódấu01001111 2và011000112. 0112 ⇐borrows 0 1100011 (99) 0‐ 1001111 ‐(79) 0 0010100 (20) Vídụ4:Cộnghaisốkhácdấu10010011 2(‐19)và000011012(+13) 012 ⇐borrows 1 0010011 (‐19) 0‐ 0001101 +(13) 1 0000110 (‐6) Thuậttoánthựchiệnphéptínhcódấu: (1) Khaibáovàxóacácbiếnlưugiátrịvàdấuđểchuẩnbịthựchiệnphéptính. (2) Kiểmtradấucủatoántửthứnhấtđểxemcóphảisốâmkhông.Nếulàsốâm thì thựchiệnbùdấuvàbùtoántử.Nếukhôngthìchuyểnquathựchiệnbước3. (3) Kiểmtradấucủatoántửthứhaiđểxemcóphảisốâmkhông.Nếulàsốâmthì thựchiệnbùdấuvàbùtoántử.Nếukhôngthìchuyểnsangthựchiệnbước4. (4) Thựchiệnphépnhânhoặcchiavớicáctoántửvừaxửlý. (5) Kiểmtradấ u.Nếuzerothìcoinhưđãkếtthúc.Nếubằng‐1(0ffh)thìthựchiện phéptínhbùhaivớikếtquảthuđượcvàkếtthúc. 50 Hiệnnayngườitasửdụnghaiquiướcbiểudiễns ốnguyênphânbiệttheothứtựcủa bytetrọngsốtrongmộttừđượcbiểudiễn: • Litteedian:bytetrọngsốnhỏnhấtđứngtrướcÆthuậnlợichophépcộnghoặc trừvà • Bigendian:bytetrọngsốlớnnhấtđứng trướcÆthuậnlợichophépnhânhoặc chia. Vídụxétmộtsốnhịphân4‐byte Theoquiướcbiểudiễnlitteedianthìthứtựđịachỉlưutrongbộnhớsẽlà: Địachỉcởsở+0=Byte0 Địachỉcơsở+1=Byte1 Địachỉcơsở+2=Byte2 Địa chỉcơsở+3=Byte3 Vàtheoquiướcbiểudiễnsốbigediansẽlà: Địachỉcởsở+0=Byte3 Địachỉcơsở+1=Byte2 Địachỉcơsở+2=Byte1 Địachỉcơsở+3=Byte0 3.2.3 Số dấu phảy tĩnh Chúngtacóthểsửdụngmộtkýhiệudấuchấmảođểbiểudiễnmộtsốthực.D ấuchấm ảođượcsửdụngtrongtừdữliệudùngđểphânbiệtvàngăncáchgiữa phầnbiểudiễn giátrịnguyêncủadữliệuvàmộtphầnlẻthậpphân.Vídụvềmộttừ8‐bitbiểudiễnsố dấuphảyđộngđượcchỉranhưtrongHình3‐1.Với cáchbiểudiễnnày,giátrịthựccủa sốđượctínhnhư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ình3‐1:Địnhdạngbiểudiễnsốdấuphảytĩnh8bit Nhượcđiểmcủaphươngphápbiểudiễnsốdấuphảytĩnhlàvùngbiểudiễnsốnguyên bịhạnchếbởidấuphảytĩnhđượcgáncốđịnh.Điềunàydễxảyra hiệntượngtrànsố khithựchiệncácphépnhânhaisốlớn. http://www.ebook.edu.vn 51 3.2.4 Số dấu phảy động Phươngphápbiểudiễnsốchínhxácvàlinhhoạtđượcsửdụngrộngrãihiệnnaylàhệ thốngbiểudiễnsốdấuphảyđộng.Đâycũnglàmộtphươngphápbiểudiễn sốkhoa họcbaogồm2phần:phầnbiểudiễnlưutrữsốmantissavàmộtphầnlưutrữbiểudiễn sốexponent.Vídụtronghệcơsốthậpphân,mộtsốnguyênbằng 5cóthểđượcbiểu diễnhoặclà 1 0.5 10⋅ , 1 50 10 − ⋅ ,ho ặc 2 0.05 10⋅ ,…Trongmáytínhsốhoặchệthốngsốnói chung,cácsốdấuphảyđộngnhịphânthườngđượcbiểudiễndạng 2 E NM=⋅ (1.2) Trongđó,Mlàphầngiátrịsốmantissa,ElàphầnlũythừacủasốN.Mthườnglàcác giátrịlẻmàphầnthậpphâncủanóthườngnằmtrongkhoảng 0.5 1M≤≤ . Hình3‐2môtảbiểudiễnmộtsốdấuphảyđộngcủatừ8bitgồm5bitbiểudiễnphầnsố cónghĩamantissa,và3bitbiểudiễnphầnlũythừ a.Vìcácphầnmantissavàlũythừa đềucóthểnhậncácgiátrịâmvìvậycácbitđầutiêncủacácphầngiátrịđóđềucóthể đượcsửdụngđểbiểudiễndấukhic ầnthiết. Hình3‐2:Biểudiễndấuphảyđộng8bít TrongmộtsốVXL,VĐKdođộrộngtừnhịphânnhỏnêncóthểsửdụng2từđểbiểu diễnmộtsốdấuphảyđộng.Một từsẽdùngđểbiểudiễngiátrịmantissa,vàmộtphầ n biểudiễngiátrịexponent. Nếuphầnmantissađượcchuẩnhóathànhmộtsốlẻcógiátrịtrongkhoảng 0.5 1M ≤ ≤ thìbitđầutiênsaubitdấuthườnglàmộtvàsẽcómộtdấuphảynhịphânẩnngaysau bitdấu. PhầnbiểudiễnexponentEsẽquyếtđịnhvịtrícủadấuphảyđộ ngsẽdịchsangtrái(E>0) haysangphải(E<0)baonhiêuvịtrí.Vídụbiểudiễnmộtsốthậpphân6.5bằngmộttừ 8bitdấuphảyđộngnhưsau: 2 11 3 .1101 2 11 1 26.5 2416 N =⋅ ⎡⎤ =++ = ⎢⎥ ⎣⎦ Trongtrườnghợpnàyphầnmantissagồm4bitvàphầnexponentgồm3bit.Nếutadịch dấuphảysangphải3vịtríbitthìchúngtasẽcómộtsốnhịphândấuphả yđộngbiểu diễnđượcsẽlà110.1. Tổngquáthóatrongtrườnghợpmộtsốnhịphândấuphảyđộngnbitgồmmbitbiểu diễnphầnmantissavàebitbiểudiễnphần exponentthìgiátrịcủasốlớnnhấtcóthểbiểu diễnđượcsẽlà 1 1(21) max (1 2 )2 e m N − −+ − =− (1.3) Vàsốdươngnhỏnhấtcóthểbiểudiễnlà 52 1 (2 1) min 0.5 2 e N − −− =⋅ (1.4) TheotiêuchuẩnIEEE754và854có2địnhdạngchínhchosốdấuphảyđộnglàsốthực dài(long)vàsốthựcngắn(short)chúngkhácnhauvềdảibiểudiễnvàđộlớn lưutrữ yêucầu.Theochuẩnnày,sốthựcdàiđượcđịnhdạng8bytebaogồm1bitdấu,11bit exponentvà53bitlưugiátrịsốcónghĩa.Mộtsốthựcngắnđượcđịnhd ạng4bytebao gồm1bitdấu,8bitlũythừavà24bitlưugiátrịs ốcónghĩa.Mộtsốthựcngắncóthể biểudiễnvàxửlýđượcsốcógiátrịnằm trongdải10 38 to10 ‐38 vàsốthựcdàicóthểbiểu diễnvàxửlýđượcsốcógiátrịthuộcdải10 308 to10 ‐308 .Đểbiểudiễnmộtgiátrịtương đươngnhưvậybằngsốdấuphảytĩnhthìcầntới256bithay32bytedữliệu. 3.2.5 Một số phép tính cơ bản Thựchiệnphépnhân VìtrongcácVĐKnhúngthườngkhônghỗtrợcácphépnhânnhiềubyte.Côngviệcnày phảiđượcthựchiệnbởingườipháttriểnchươngtrìnhvàthểhiệndưới dạngmộtthuật toándựatrêncácphéptoáncósẵnápdụngchosốnhịphânlàcộng/trừvàdịch.Đểcó mộtsựhiểubiếtrõrànghơnvềthuậttoánthựchiệnphép nhân,chúngtaxétmộtvídụ vềmộtphéptínhnhânhaisốnhịphântổngquátnhư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ênlýthựchiệnphépnhâncũnggiốngnhưtathựchiệnphépnhânhaiđathức. Trongtrườnghợpnhânhaisốnhịphânthìmỗiphầntửlàmộtbit,bytehoặctừ.Ví dụ cụthểvớihaisốnhịphân4bittathuđượcphépnhânthựchiệnnhư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ậttoánthựchiệnphépnhân32bittheotrìnhtựsau: (1) Cấpphátvùngnhớđủlớnđểlưusốđượcnhân32bitvàcóthểthựchiệnphép dịchtrái32lần.Đặtgiátrịkhởit ạochobộđếmbitbằng32vàxóathanhghi haybiếnlưugiữkếtquảphépnhân.(Chúý:Sốlượngbitcầnđểlưugiátrịkết quảphảibằngtổngsốlượngbitcầnđể lưucácsốhạngphépnhân) (2) Dịchsốnhânsangphảimộtvịtríbitvàkiểmtracờnhớ.Nếukhôngcócờnhớ thìtiếptụcthựchiệnbước3.Nếu xuấthi ệncờnhớthìcộngthêmvàobiếnlưu kếtquảhiệntạicủaphépnhânmộtgiátrịbằnggiátrịcủasốđược nhân. http://www.ebook.edu.vn 53 (3) Dịchsốđượcnhânsangtráimộtvịtríbitvàgiảmbộđếmdịchđimột.Kiểm traxemgiátrịcủabộđếmdịchcóbằngkhôngkhông?Nếubằngkhôngthì thựchiện tiếpbước4,cònkhôngthìquaytrởlạithựchiệnbước2. (4) Kếtquảcuốicùngcủaphépnhânđượclưutrongthanhghibiếnkếtquả. Vídụphépnhântừnhịphân4 bit1100x1101 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ựcthithuậttoánthựchiệnphépnhânsốnguyênkhôngdấubằngngônngữC/C++: Thựchiệnphépchia Phépchiacóthểđượcthựchiệnbằngcáchchuyểnđổithànhphépnhânvà phépdịch. Vídụmuốnthựchiệnphépchia5tronghệthậpphânchúngtacóthểthựchiệnbởimột phépnhân2vàdịchdấuphảycủakếtquảthuđược sang trái mộtđơnvị.Mộtcách tổngquátcóthểthựchiệnchuyểnđổimộtphépchiatươngđươngnhưsau: long product = 0; while (multipier != 0){ if (multiplier & 1){ product += multiplicand; } multiplier >> =1; multiplicand <<= 1; } 54 x nx aan = Đốivớiphépchianhịphânthìnsẽđượcchọnlàmộtsốlũythừacủa2vàphảilớnhơn a. Thuậttoánthựchiệnphépchiacóthểđượcthựcthibởiphép dịch,cộngvàtrừnhưsau: (1) Nạpbiếnlưugiátrịthươngsốbằnggiátrịcủasốbịchia;sốbướcdịchcầnthực hiệnbằngsốbitlưusốbịchia. (2) Dịchtráibiếnlưugiátrịthươngsốvàophầnbiếnlưugiátrịdưcủaphépchia. (3) Sosánhsốdưvớisốchia.Nếusốdưlớnhơnhoặcbằngsốchiathìth ựchiện phéptrừsốdưđimộtgiátrịbằnggiátrịs ốchia.Nếukhôngthìchuyểnsang thựchiệnbướctiếptheo. (4) Giảmbiếnlưugiátrịsốlầnlặpvàkiể mtraxemnóđãbằngkhôngchưa.Nếu chưabằngkhôngthìquaytrởlạibước2thực hiệntiếp,cònnếubằngkhôngthì giátrịcủaphépchiađượclưutrongônhớch ứasốdưvàthươngsố. ThựcthithuậttoánbằngngônngữC/C++ Trướckhithựchiệnphépchiayêucầucầnphảikiểmtralỗichiakhôngcóthểxảyra. Thu ậttoánthựchiệnphépchiachủyếudựatrênphépdịchvàphéptrừ.Sốbịchiasẽ dịchsangtráivàlưuvàomộtbiến,phầndưsẽđượcsosánhvớisốchia.Nếu phầndư bằnghoặclớnhơnsốchiathìphầndưsẽđượctrừđimộtgiátrịbằngsốchiavàsốbị chiasẽđượccộngthêmmột vàdịchsangtrái mộtvịtríbitvà đóchínhđượcgọilà thươngsố.Quátrìnhnàyđượclặplạivàtiếptụcchođếnkhisốlầndịchbằngđúngsố bitcủatừlưusốbịchia. Cácbiếnđượcsửd ụngtrongquátrìnhthựchiệnphépchiabaogồm5biếnsố:sốbị chia,sốchia,thươngsố,sốdưvàsốlầndịch.Trongquátrìnhthựchiệnthìsốbịchia, thươngsố, vàsốdưcùngchiasẻchungmộtvùngônhớ.Sốdưvàsốbịchiasẽthuộc cùngmộttừlớn.Sốbịchianằmtrongphầntừtrọngsốthấpvàsốdưsẽnằmtrong phần từtrọngsốcao.Saukhithựchiệnxongphépchiathìsốbịchiasẽđượcdịchtoàn bộsangtráivàophầnbiếnsốdưvàđượcthaythếbằngthươngsố.Kếtquảcònlạithu 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 đượcchỉcònlàsốdưvàthươngsố.Hìnhảnhvềbộnhớlưucácbiếnsốthựchiệntrong thuậttoánnàyđượcminhhoạnhưtrongHình3‐3. Hình3‐3:Thựchiệnphépchia 3.3 Tập lệnh 3.3.1 Cấu trúc tập lệnh CISC và RISC HầuhếtcácviđiềukhiểnvàVXLnhúngcócấutrúcđượcpháttriểndựatheokiếntrúc máytínhtậplệnhphứchợpCISC(ComplexInstructionSetComputer).CISClàmộtcấu trúcx ửlýcáclệnhphứchợp,tứclàmộtlệnhphứchợpsẽbaogồmmộtvàilệ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ươngtrìnhtừbộnhớ.Điềunàyrấtcóýnghĩavớicáckiếntrúcthiếtkếxửlýtínhtoán theokiểutuầntự.Lýdochosựrađờicủatậplệnhphứch ợpnhằmgiảmthiểudung lượngbộnhớcầnthiếtđểlưugiữchươngtrìnhthựchiện,vàsẽgiảmđượcgiáthànhvề 56 bộnhớcầncungcấpchoCPU.Cáclệnhcànggọnvàphựchợpthìsẽcầncàngítkhông gianbộnhớchươngtrình.Kiếntrúctậplệnhphứchợpsửdụngcáclệnh vớiđộdàibiến đổituỳthuộcvàođộphứchợpcủacáclệnhtừđơngiảnđếnphứctạp.Trongđósẽcó mộtsốlượnglớncáclệnhcóthểtruynhậptrựcti ếpbộnhớ.Vìvậyvớikiếntrúctập lệnhphứchợpchúngtasẽcóđượcmộttậplệnhđadạngphứchợp,gọn,vớiđộdài lệnhthayđổivàdẫnđế nchukỳthựchiệnlệnhcũngthayđổituỳtheođộphứchợp trongtừnglệnh.Mộtvàilệnhphứchợp,đặcbiệtlàcáclệnhtruynhậpbộnhớcầntới vàich ụcchukỳđểthựchiện.TrongmộtsốtrườnghợpcácnhàthiếtkếVXLthấyrằng cầnphảigiảmchukỳnhịplệnhđểcóđủthờigianchocáclệnhhoànthànhđiềunày cũngdẫnđếnthờigianthựchiệnbịkéodàihơn. MộtsốVĐKđượcpháttriểntheokiếntrúcmáytínhtậplệnhrútgọnRISC(Reduced InstructionSetComputer).RISCphùhợpvới cácthiếtkếkiếntrúcxửlýcáclệnhđơn. Thuậtngữ“rútgọn”(reduced)đôikhibịhiểukhôngth ậtchínhxáctheonghĩađencủa nóthựcchấtýtưởnggốcxuấtphát từkhảnăngcungcấpmộttậplệnhtốithiểuđểthực hiệntấtcảcáchoạtđộngchínhnhư:chuyểndữliệu,cáchoạtđộngALUvàrẽnhánh điềukhiểnchương trình.Chỉcócáclệnhnạp(load),lữutrữ(store)làđượcphéptruy nhậptrựctiếpbộnhớ. B‐1:SosánhđặcđiểmcủaCISCvàRISC CISC RISC Bấtkỳlệnhnàocũngcóthểtham chiếutớibộnhớ Chỉ có các lệnh Nạp (Load) hoặc Lưu trữ (Store) là có thể thamchiếutớibộnhớ Tồntạinhiềulệnhvàkiểuđịachỉ Tồntạiítlệnhvàkiểuđịachỉ Khuôndạnglệnhđadạng Khuôndạnglệnhcốđịnh Chỉcómộttậpthanhghi Cónhiềutậpthanhghi Các lệnh thực hiện trong nhiều nhịpchukỳ Các lệnh thực hiện trong một nhịpchukỳ Có một chương trình nhỏ để thôngdịchlệnh Lệnhđược thực hiện trực tiếp ngaybởiphầncứng Chương trình thông dịch lệnh phứctạp Chương trình biên dịch mã nguồnphứctạp Khônghỗtrợcơchếpipeline Hỗtrợcơchếpipeline Kíchthướcmãchươngtrìnhnhỏ gọn Kíchthướcmãchươngtrìnhlớn http://www.ebook.edu.vn 57 3.3.2 Định dạng lệnh Hình3‐4:ĐịnhdạnglệnhMIPS Hình3‐5:Phânloạicácphépthựcthilệnh 3.3.3 Các kiểu truyền địa chỉ toán tử lệnh Cáckiểuđánh/truyềnđịachỉchophépchúngtachỉra/truyềntoántửthamgiatrong cáclệnhthựcthi.Kiểuđịachỉcóthểchỉralàm ộthằngsố,môtthanhghihoặcmộtkhu vựcc ụthểtrongbộnhớ.Mộtsốkiểuđánhđịachỉchophépsửdụngđịachỉngắnvà mộtsốloạithìchophépchúngtaxácđịnhkhuvựcchứatoántửlệnh,vàthườngđược 58 gọilàđịachỉhiệudụngcủatoántửvàthườnglàđộng.Chúngtasẽxétmộtsốloạihình đánhđịachỉcơbảnhiệnđangđượcsửdụngrộngrãitrongcơchếthực hiệnlệnh. Đánhđịachỉtứcthì(ImmediateAddressing) Phươngphápnàychophéptruyềngiátrịtoántửlệnhmộtcáchtứcthìnhưmộtphần củacâulệnhđượcthựcthi.Vídụ nếusửdụngkiểuđánhđịachỉtứcthờichocâulệnh Load0x0008thìgiátrị0x0008sẽđượcnạpngayvàoAC.Trườngbitthườngdùngđể chứatoántửlệnhsẽchứagiátrịthựcc ủatoántửchứkhôngphảiđịachỉcủatoántử cầntruyềncholệnhthựcthi.Kiểuđịachỉtứcthờichophépthựcthilệnhrấtnhanhvì khôngphảithựchiệntruy xuấtbộnhớđểnạpgiátrịtoántửmàgiátrịtoántửđãđược gộpnhưmộtphầntrongcâulệnhvàcóthểthựcthingay.Vìtoántửthamgianhưmột phầncốđịnhcủachương trìnhvìvậykiểuđánhđịachỉnàychỉphùhợpvớicáctoántử hằngvàbiếttrướctạithờiđiểmthựchiệnchươngtrình,hayđãxácđịnhtạithờiđiểm biên dịchchươngtrình. Đánhđịachỉtrựctiếp(DirectAddressing) Phươngphápnàychophéptruyềntoántửlệnhthôngquađịachỉtrựctiếpchứatoántử đótrongbộnhớ.Vídụnếus ửdụngcơchếđánhđịachỉtoántửtrựctiếpthìtrongcâu lệnhLoad0x0008sẽđượchiểulàdữliệuhaytoántửđượcnạptrongcâulệnhnàynằm trongbộnhớtạiđịachỉ0x0008.Cơ chếđánhđịachỉtrựctiếpcũngthuộcloạihìnhkhá nhanhmặcdùkhôngnhanhđượcnhưcơchếtruyềnđịachỉtứcthờinhưngđộmềm dẻocaohơnvìđịachỉcủatoántửkhông nằmtrongphầnmãlệnhvàgiátrịcóthểthay đổitrongquátrìnhthựcthichươngtrình. Đánhđịachỉthanhghi(RegisterAddressing) Trongcáchđánhđịachỉvàtruyềntoántửnàythìtoántửkhôngnằ mtrongbộnhớnhư trườnghợpđánhđịachỉtrựctiếpmànằmtạichínhtrongthanhghi.Khitoántửđã đượcnạpvàothanhghithìviệcthựchiệncóthểrấtnhanhvìtốcđộ truyxuấtthanhghi nhanhhơnsovớibộnhớ.Nhưngsốlượngthanhghichỉcóhạnvàphảiđượcchiasẻ trongquátrìnhthựchiệnchươngtrìnhvìvậycáctoántửphảiđượcn ạpvàothanhghi trướckhinóđượcthựcthi. Đánhđịachỉgiántiếp(IndirectAddressing) Trongphươngpháptruyềntoántửnày,trườngtoántửtrongcâulệnhđượcsửdụngđể thamchiếutớimột contrỏnằmtrongbộnhớđểtrỏtớiđịachỉhiệudụngcủatoántử. Cơchếtruyềnnàycóthểnóilàmềmdẻonhấtsovớicáccơchếtruyềnđịachỉkhác trongquátrình thựcthichươngtrình.Vídụnếuápdụngcơchếtruyềnđịachỉgiántiếp trongcâulệnhLoad0x0008thìsẽđượchiểulàgiátrịdữliệucóđịachỉtại0x0008thực chấtlàch ứađịachỉhiệudụngcủatoántửcầntruyềnchocâulệnh.Giảthiếttạivịtríô nhớ0x0008đangch ứa giátrị 0x02A0thì0x02A0chínhlà giátrịthựccủatoán tửsẽ đượcn ạpvàoAC.Mộtbiếnthểkháccũngcóthểthựchiệntheocơchếnàylàtruyền thamchiếutớicontrỏnằmtrongkhuvựcthanhghi.Cơchếnàycònđượcbiếttớivới têngọilàđánhđịachỉgiántiếpthanhghi.Vídụm ộtcâulệnhLoadR1sửdụngc ơchế http://www.ebook.edu.vn 59 truyềnđịachỉgiántiếpthanhghithìchúngtacóthểdễdàngthôngdịchđượctoántử truyềntrongcâulệnhnàycóđịachỉhiệudụngnằmtrongthanhghiR1. Cáchđánhđịachỉcơsở vàchỉsố(IndexedandBasedAddressing) Trongcơchếnàyngườitasửdụngmộtthanhghiđểchứaoffset(độchênhlệchtương đối)màsẽđượccộngvớitoántửđểtạoramộtđịachỉhiệu dụng.Vídụ,nếutoántửX củalệnhLoadXđượcđánhđịachỉtheocơchếđịachỉchỉsốvàthanhghiR1làthanh ghichứachỉsốvàcógiátrịlà1thìđịachỉhiệudụ ngcủatoántửthựcchấtsẽlàX+1.Cơ chếđánhđịachỉcơsởcũnggiốngnhưvậyngoạitrừmộtđiềulàthayvìsửdụngthanh ghiđịachỉoffsetthìởđâysửdụngthanhghi địachỉcơsở.Vềmặtlýthuyếtsựkhác nhaugiữahaicơchếthamchiếu địachỉnàylàchúngđượcsửdụngthếnàochứkhông phảicáctoántửđượctínhtoánthểnào.Mộtthanhghichỉ sốsẽlưuchỉsốmàsẽđược sửdụngnhưmộtoffsetsovớiđịachỉđượcđưaratrongtrườngđịachỉcủalệnhthực thi.Thanhghic ơsởlưumộtđịachỉcơsởvàtrường địachỉtrongcâulệnhthựcthisẽ lưugiátrịdịchchuyểntừđịachỉnày.Haicơchếthamchiếuđịachỉnàyrấthữuích trongviệctruyxuấtvớicácphầntửkiểu mảng.Tuỳthuộcvàothiếtkếtậplệnhcác thanhghimụcđíchchungthườnghayđượcsửdụngtrongcơchếđánhđịachỉnày. Đánhđịachỉngănxếp(StackAddressing) Trongcơchếtruyềnđị achỉnàythìtoántửnhậnđượctừđỉnhngănxếp.Thayvìsử dụngthanhghimục đíchchunghayônhớkiếntrúcdựatrênngănxếplưucáctoántử trênđỉnhcủangănx ếp,vàcóthểtruyxuấtvớiCPU.Kiếntrúcnàykhôngchỉhiệuquả trongviệclưugiữcácgiátrịtrunggiantrongcácphéptínhphứctạpmàcòncungcấp mộtphươngpháphiệu quảtrongviệctruyềncácthamsốtrongcáclờigọihàmcũng nhưđểlưucấtcáccấutrúcdữliệucụcbộvàđịnhnghĩaraphạmvitồntạicủacácbiến và cáchàmcon.Trongcáccấutrúclệnhtruyềntoántửdựatrênngănxếp,hầuhếtcác lệnhchỉbaogồmphầnmã,tuynhiêncũngcómộtsốlệnhđặcbiệtchỉcó mộttoántửví dụnhưlệnhcấtvào(push)hoặclấyra(pop)từngănxếp.Chỉcómộtsốlệnhyêucầuhai toántửthìhaigiátrịchứatrong2ônhớtrênđỉnh ngănxếpsẽđượcsửdụng.Vídụ nhưlệnhAdd,CPUlấyrakhỏingănxếphaiphầntửn ằmtrênđỉnhrồithựchiệnphép cộngvàsauđólưukếtquả trởlạiđỉnhngănxếp. Cáccáchđánhđịachỉkhác Córấtnhiềubiếnthểtạobởicáccơchếđánhđịachỉgiớithiệuởtrên.Đólàsựtổhợp trongviệctạora hoặcxácđịnhđịachỉhiệudụngcủato ántửtruyềncholệnhthựcthi. Vídụnhưcơchếđánhđịachỉchỉsốgiántiếpsửdụngđồngthờicảhaicơch ếđánhđịa chỉđồngthời, tươngtựnhưvậycũngcócơchếđánhđịachỉcơsở/offset…Cũngcómột sốcơchếtựđộngtănghoặcgiảmthanhghisửdụngtronglệnhđangthựcthinhờvậy màcó thểgiảmđượcđộlớncủamãchươngtrìnhđặcbiệtphùhợpchocácứngdụ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ấtnhanh.RISC sử dụng kỹthuật pipelineđểtăngcườngtốcđộxửlýcáclệnhđồngthờinhờvàokhảnăngthựchiện xếp chồngcuốnchiếuliêntụccáclệnhtheocácphânđoạnthựchiệnlệnh.Vídụmộtlệnhcó thểđượcđọctừbộnhớtrongkhimộtlệnhkhácđangđượcgiảimãđể chuẩnbịđưavào xửlývàmộtlệnhkhácthìđangđượcthựchiện.CũngcómộtsốVĐKcótêngọilàmáy tínhtậplệnhđặcbiệtSISC(SpecificInstructionSetComputer)vìchúngđược pháttriển dựatrêntậplệnhđượcthiếtkếđặcchủngchomụcđíchđiềukhiển. Hình3‐6:Nguyênlýthựchiệnpipeline Pipelineđượcthựchiệndựatrênnguyênlýxếpchồngcuốnchiếucácphânđoạntrong mỗimộtlệnh. Thôngthườngmỗi mộtlệnhđượcchia ralàmnhiềuphânđoạnthực hi ện,phổbiếnhiệnnaylà5phânđoạntuầntựnhưsau: (1) Trỏlệnh(InstructionFetch):Thựchiệntrỏtớilệnhthựchiệnbằngcáchđọcđịa chỉlệnhtừthanhghicontrỏ lệnh(PC),đọclệnhđóratừbộnhớchươngtrìnhvà tínhtoánrồinạpgiátrịmớivàotrongthanhghicontrỏlệnhđểtrỏtớilệnhsẽ thựcthitiếptheo. (2) Giảimãlệnh (Decode):Thựchiệnthôngdịchvàchuyểnđổimãlệnhthànhdạng mãđểALUcóthểhiểuvàchuẩnbịthựcthi.Quátrìnhnàythựcchấtlàquátrình đọcvàchuyểnđổinộidung trongcácthanhghichươngtrình. (3) Thựchiệnl ệnh(Execute):ALUthựcthilệnhvừađượcgiảimã. (4) Truynhậpbộnhớdữliệu(Memory):Đọcrahoặcviếtvàobộnhớdữliệ unếu lệnhthựchiệncónhucầunày. (5) Viếttrởlại(Writeback):Hoànthànhvàcậpnhậtnộidungcácthanhghi. Chúngtacầnphânbiệtc ơchếpipelinevàcơchếthự chiệnsongsongmặcdùcảhaiđều nhằmđápứngyêucầuthựcthicạnhtranhvàtăngtốcđộthựcthi. Cơchếpipelinegiải quyếtvầnđềcạnhtranhvàtăngtốcđộthực hiệnbằngcáchchianhỏtínhtoánthành cácbướcnhỏtrongkhiđócơchếsongsongsẽsửdụngnhiềunguồntàinguyênđộclập đểthựchiện. http://www.ebook.edu.vn 61 Hình3‐7:Quátrìnhthựchiệnlệnhtheonguyênlýpipeline 3.3.5 Harzard Trongcơchếthựchiệnlệnhpipelinethểhiệnrõđượcưuđiểmtrongviệcthúcđẩyhiệu suấtthựchiệnlệnh,tuynhiêncóthểxảyrahiệntượngthựcthisaidosựthi ếuđồngbộ vàphụthuộclẫnnhaugiữacáclệnhtrongnhómthựcthipipeline. Hazarddữliệu Hiệntượngharzardxảyrakhicósựphụthuộclẫngiữacáclệnhnằm trongkhoảngxếp chồngthựchiệncuốnchiếutheonguyênlýpipeline.Điềunàycóthểdễdànghìnhdung khihaihoặcnhiềulệnhthựchiệnxếpchồngkhicónhucầuđọc giátrịcủacùngmột toántử.Dosựphụthuộcnhưvậynênkhiviếtchươngtrìnhchúngtaphảikiểmsoát đượcthứtựchươngtrìnhmàcáclệnhsẽđượcthựchiệnnhưthế nào.Mụcđíchcủaviệc thựcthilàlàmsaođểhỗtrợđượccơchếthựchiệnsongsongvàtăngđượchiệusuất 62 thựcthichươngtrình.Việcpháthiệnvàtránhđượchiệntượnghazardlàcầnthiếtđể đảmbảochươngtrìnhđượcthựcthiđúng.Tuỳtheonguyênnhângâyrahazardngười taphânra3loạ ihìnhchínhtuỳthuộcvàothứtựđọchoặcviếttruynhậplệnhcủacác nhómlệnhphụthuộcnhautrongcơchếthựchiệnsongsong. Xéthailệnhivàjtrongđólệnhiđược thựchiệntrướclệnhjtrongchươngtrình.Hiện tượngHazarddữliệucóthểxảyranhưsau: ‐RAW(readafterwrite):Đọcsaukhiviết Khilệnhivàjđềucầnsửdụng vàtraođổithôngtinvớicùngmộtgiátrịônhớ,trong đólệnhicầnphảithựchiệnxongvàcậpnhậtgiátrịvàoônhớđórồilệnhjmớicóthể đọ cvàsửdụng.Nếulệnhichưathựchiệnxongmàlệnhjđãđọcgiátrịônhớđóthìsẽ xảyrahiệntượngđượcgọilàhazarddữliệu.Lệnhjđọcthôngtin từmộtônhớtrước khilệnhikịpviếtvàovìvậylệnhjsẽchỉđọcđượcgiátrịc ũchứkhôngphảigiátrịmới cầnphảisửdụng.Trongcơchếthựchiệ npipeline5phânđoạnsẽgặpphảihiệntượng hzarddữliệukhicómộtlệnhnạp(load)theosaumộtlệnhALUsốnguyênvàsửdụng trựctiếpkếtquảnạp. ‐ WAW(writeafterwrite):Viếtsaukhiviết Lệnhjviếtvàomộttoántửtrướckhilệnhiviếtvào.Màyêucầuthựcthiđúngchương trìnhlàlệnhiphảiviếttrước lệnhjvàgiátrịcuốicùnglưutrongtoántửphảidolệnhj đưarachứkhôngphảilệnhi.Hiệntượngnàyđượcgọilàhazarddữliệukhicósựphụ thuộcđầura vànhiềulệnhcùngcónhucầutruynhậpviếtvàocùngmộtbiếnhaymột ônhớ. ‐WAR(writeafterread):Viếtsaukhiđọc jviếtvàotoántửđíchtrướckhinóđượcđọc bởilệnhidođólệnhIsẽnhậnđượcgiátrị sai.HiệntượngHazardnàyxuấthiệnkhicósựphụthuộctoánhạngtrongcácphép tính Hazarddosựphụthuộcđiềukhiể n Kiểuphụthuộccũngkhá phổbiếnlàdocấutrúcđiềukhiển.Sựphụthuộcđiềukhiển đượcquyếtđịnhtrìnhtựthựcthicủamộtlệnhitheolệnhrẽnhánhđả mbảosaochonó đượcthực thiđúngnhưthứtựmongmuốn.Tấtcảcáclệnhngoạitrừkhốicơbảnđầu tiêncủachươngtrìnhđềuđượcđiềukhiểntheocấutrúclệnh rẽnhánhvàphảiđược đảmbảođểthựcthiđúngtheothứtự.Mộtvídụđơngiảnnhấtvề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ộccâulệnhđiềukiệnif.Vídụđoạnmãchươngtrìnhminhhọanhư sau: if (p1) { S1; } if (p2) { S2; } http://www.ebook.edu.vn 63 Câulệnhđượcđiềukhiểnphụthuộcvàop1vàS2đượcđiềukhiểnphụthuộcp2chứ khôngphảip1. Nóichung,có2ràngbuộccóthểgiảthiếttrongsựphụthuộcđiềukhiể 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ôngthểđượcphépchuyểnlêntrướccâulệnhthựchiệnkiểmtrađiềukiện. Vídụ chúngtakhôngthểđưalệnhtừphần thenlêntrướcphầnif. (2)Mộtlệnhthựchiệnđộclậpvàkhôngphụthuộcvàolệnhrẽnhánhkhôngthểđược chuyểnvàokhuvựcsauphầnthựchiệncủanhánhthựchiệnphụthuộc.Víd ụkhông thểđưamộtlệnhlêntrướcphầnlệnh ifvàchuyểnnóvàotrongphầnthen. Sựphụthuộcđiềukhiểnphảiđượcđảmbảobởi2thuộctínhtrongcơchếpipelineđơn giản.Thứ nhất,cáclệnhthựchiệntrongchươngtrìnhphảiđúngtheo trìnhtựđược điề ukhiểncủanó.Trìnhtựnàyphảiđượcđảmbảorằngmộtlệnhmàphảithựcthi trướcmộtnhánhđiềukhiểnthìphảithựchiệntrướcnhánhđó.Thứhai,việc pháthiện rasựxungđộtvềđiềukhiển(controlhazard)sẽđảmbảorằngmộtlệnhmàđượcđiều khiểnphụthuộcvàomộtnhánhthìkhôngđượcthựchiệnchừngnàohướng thựchiện củanhánhđórõràng.Bảođảmđượcsựphụthuộcđiềukhiểnlàcầnthiếtvàcũnglà mộtcáchđơngiảnđểđảmbảođúngtrìnhtựthựchiệnchươngtrình.S ựphụthuộc điềukhiểnkhôngphảilàmộtsựhạnchếcơbảnvềkhảnăngthựcthichươngtrình. Chúngtacóthểsẵnsàngthựcthithêmnhữnglệnhmàlẽrakhôngnên đượcthựcthi nếuchúngkhônggâyảnhhưởnggìđếntínhđúngđắncủachươngtrình,nếukhôngsự xungđộtgâyrabởisựphụthuộcđiềukhiểncóthểxảyra.Sựphụthuộcvềđ iềukhiển khôngphảilà mộtthuộctínhkịchtínhbắtbuộcphảibảođảm.Thayvìđiềuđó,hai thuộctínhkịchtínhchoviệclậptrìnhmộtcáchđúngđắnvàthường đượcbảođảmlà phảitránhđượcxungđộtbởicảsựphụthuộcvềdữliệuvàđiềukhiểnvàđóchínhlà hànhvingoạilệcóthểxảyratrongluồngdữliệuthựcthi chươngtrình. 3.4 Ngôn ngữ và môi trường phát triển 3.4.1 Ngôn ngữ Mộttrongnhữngngônngữlậptrìnhcólẽphổcậprộngrãinhấthiệnnaylàngônngữ C.SovớibấtkỳngônngữlậptrìnhnàokhácđangtồntạiCthựcsựphùh ợpvàtrở thànhmộtngônngữpháttriểncủahệnhúng.Điềunàykhôngphảilàcốhữuvàsẽtồn tạimãi,nhưngtạithờiđiểmnàythìCcólẽlàmộtngônngữ gầngũinhấtđểtrởthành mộtchuẩnngônngữtrongthếgiớihệnhúng.Trongphầnnàychúngtasẽcùngtìm hiểutạisaoClạitrởthànhmộtngônngữphổbiếnđếnvậyvàt ạisaochúngtalựachọn nónhưmộtngônngữminhhọachoviệclậptrìnhhệnhúng. Sựthànhcôngvềpháttriểnphầnmềmthườnglànhờvàosựlựachọnngônngữphù hợ pnhấtchomộtdựánđặtra.Cầnphảitìmmộtngônngữđểcóthểđápứngđượcyêu cầulậptrìnhchocácbộxửlýtừ8‐bitđến64‐bit ,trongcáchệthốngchỉcóhữu hạnvề 64 bộnhớvàiKbytehoặcMbyte.Chotớinay,điềunàychỉcóClàthựcsựcóthểthỏamãn vàphùhợpnhất. RõràngCcómộtsốưuđiểmnổibậttiêubiểu nhưkhánhỏvàdễdàngchoviệchọc,các chươngtrìnhbiêndịchthườngkhásẵnchohầuhếtcácbộxửlýđangsửdụnghiệnnay, vàcórấtnhiềungườiđãbiết vàlàmchủđượcngônngữnàyrồi,haynóicáchkháccũng đãđượcphổcậptừlâu.HơnnữaC cólợithếlàkhôngphụthuộcvàobộxửlýthựcthi mãnguồn.Ngườilậ ptrìnhchỉphảitậptrungchủyếuvàoviệcxâydựngthuậttoán, ứngdụngvàthểhiệnbằngngônngữthânthiệnthayvìphảitìmhiểusâuvềkiếnthức phầncứ ng,cũng nhưrất nhiềucácưuđiểmnổibật kháccủa ngônngữ bậccao nói chung. CólẽmộtthếmạnhlớnnhấtcủaClàmộtngônngữbậccaomứcth ấpnhất.Tứclàvới ngônngữCchúngtavẫncóthểđiềukhiểnvàtruynhậptrựctiếpphầncứngkháthuận tiệnmàkhônghềphảihysinhhayđánhđổibất kỳmộtthếmạnhnàocủangônngữbậc cao.Thựcchấtđâycũnglàmộttrongnhữngtiêuchíxâydựngcủanhữngngườisáng lậprangônngữCmuốnhướngtớ i.Thựctếđiềunàyđãđượcđềcậpđếnkhihainhà sánglậprangônngữC,KernighanvàRitchieđãđưavàotrongphầngiớithiệucủa cuốnsáchcủahọ“TheCProgrammingLanguage”nhưsau: “Cisarelatively“lowlevel”language.Thischaracterizationisnotpejorative;itsimplymeans thatCdealswiththesamesortofobjectsthatmostcomputersdo.Thesemaybecombinedand movedaboutwiththearithmeticandlogicaloperatorsimplementedbyrealmachines…” TấtnhiênlàC khôngphảilàngônngữduynhấtchocácnhàlậptrìnhnhúng.Ítnhất hiệnnayngườitacũngcóthểbiếttớingoàingônngữClàAssembly,C++,vàAda. Trongnhữngbuổiđầupháttriể nhệnhúngthìngônngữAssemblychủyếuđượcsử dụngchocácvixửlýđích.Vớingônngữnàychophépngườilậptrìnhđiềukhiểnvà kiểmsoáthoàntoànvixửlýcũngnhưphầnc ứnghệthốngtrongviệcthựcthichương trình.TuynhiênngônngữAssemblycónhiềunhượcđiểmmàcũngchínhlàlýdotạ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ữ Assemblyrấtkhókhănvàđặcbiệtkhókhăntrongviệcpháttriểncácchươngtrìnhứng dụnglớnphứctạp.Hiênnaynóchỉđượcsửdụng chủyếunhưđiểmnốigiữangônngữ bậccaovàbậcthấpvàđượcsửdụngkhicóyêucầuđặcbiệtvềhiệusuấtthựchiệnvà tốiưuvềtốcđộmà khôngthểđạtđượcbằngngônngữkhác.NgônngữAssemblychỉ thựcsựphùhợpchonhữngngườicókinhnghiệmvàhiểubiếttốtvềcấutrúcphầncứng đíchcũngnhưnguyênlýthự chiệncủabộlệnhvàchípxửlý. C++làmộtngônngữkếthừatừCđểnhằmvàocáclớpứngdụngvàtưduylậptrình hướngđốitượngvàcũngbắtđầuchiếm đượcsốlượnglớnquantâmtrongviệcứng dụngchopháttriểnhệnhúng.TấtcảcácđặcđiểmcốtlõicủaCvẫnđượckếthừahoàn toàntrongngônngữC++vàngoàiracònhỗ trợkhảnăngmớivềtrừutượnghóadữliệu vàphùhợpvớitưduylậptrìnhhiệnđại;hướngđốitượng.Tuynhiênđiềunàybịđá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ươngtrìnhlớnvàkhôngchịusứcéplớnvềthờigianthựcthi. Adacũnglàmộtngônngữhướngđốitượngmặcdùnókhôngđượcphổcậprộngrãi nhưC++.AdađượcxâydựngbởicơquanquốcphòngMỹđểphụcvụpháttriểncác phầnm ềmquânsựchuyêndụngđặcbiệt.Mặcdùcũngđãđượcchuẩnhóaquốctế (Ada83vàAda95)nhưngnóvẫnkhôngđượcphổcậprộngrãingoàiviệcứngdụngchủ yếutrongcáclĩ nhvựcquânsựvàhàngkhôngvũtrụ.Vànócũngdầndầnbịmấtưu thếvàsựphổcậptrongthờigiangầnđây,đâycũnglàmộtđiềuđángtiếcvìbảnthân Adacũnglàmộtngônngữcónhiềuđặcđi ểmphùhợpchoviệcpháttriểnphầnmềm hệnhúngthayvìphảisửdụngC++. 3.4.2 Biên dịch Hình3‐8:Quátrìnhpháttriểnvàbiêndịchphầnmềmnhúng Quátrìnhbiêndịch(Compiling) Nhiệmvụchínhcủabộbiêndịchlàchuyểnđổichươngtrìnhđượcviếtbằngngônngữ thânthiệnvớiconngườivídụnhưC,C++,…thànhtậpmãlệnht ươngđươngcóthểđọc vàhiểubởibộvixửlýđích.Theocáchhiểunàythìbảnchấtmộtbộhợpngữcũnglà mộtbộbiêndịchđểchuyểnđổimột‐mộttừmột dònglệnhhợpngữthànhmộtdạng mãlệnh tươngđươngcho bộvi xửlýcó thểhiểu vàthựcthi.Chínhvìvậyđôi khi ngườitavẫnnhầmhiểugiữakháiniệmb ộhợpngữvàbộbiêndịch.Tuynhiênviệc biêndịchcủabộhợpngữsẽđượcthựcthiđơngiảnhơnrấtnhiềusovớicácbộbiên dịchchocácmãnguồnviết bằngngônngữbậccaokhác. Mỗimộtbộxửlýthườngcóriêngngônngữmáyvìvậycầnphảichọnlựamộtbộbiên dịchphùhợpđểcóthểchuyểnđổichínhxácthành dạngmãmáytươngứngvớib ộxử lýđích.Đốivớicáchệthốngnhúng,bộbiêndịchlàmộtchươngtrìnhứngdụngluôn 66 đượcthựcthitrênmáychủ(môitrườngpháttriểnchươngtrình)vàcòncótêngọilàbộ biêndịchchéo(cross‐compiler).Vìbộbiêndịchchạytrênmộtnềnphầncứngđểtạo ra mãchươngtrìnhchạytrênmôitrườngphầncứngkhác.Việcsửdụngbộbiêndịchchéo nàylàmộtthànhphầnkhôngthểthiếutrongquátrìnhpháttriểnphầnmềmchohệ nhúng.Các bộbiêndịchchéothườngcóthểcấuhìnhđểthựcthiviệcchuyểnđổicho nhiềunềnphầncứngkhácnhaumộtcáchlinhhoạt.Vàviệclựachọncấuhìnhbiêndịch tươngứngvớicácnềnphầncứngđôikhicũngkháđộclậpvớichươngtrìnhứngdụng củabộbiêndịch. Kếtquảđầutiêncủaquátrìnhbiêndịchnhậnđượclà mộtdạngmãlệnhđượcbiếttới vớitêngọilàtệpđốitượng(objectfile).Nộidungcủatệpđốitượngnàycóthểđược xemnhưlàmộtcấutrúcdữliệu trunggianvàthườngđượcđịnhnghĩanhưm ộtđịnh dạngchuẩnCOFF(CommonObjectFileFormat)hayđịnhdạngcủabộliênkếtmởrộng ELF (Extended Linker Format)… Nếu sử dụng nhiều bộ biên dịch cho các modul mã nguồncủamộtchươngtrìnhlớnthìcầnphảiđảmbảorằngcáctệpđốitượngđượctạo raphảicóchungmộtkiểuđịnhdạng. Hầuh ếtnộidungcủacáctệpđốitượngđềubắtđầubởimộtphầnheaderđểmôtảcác phầntheosau.Mỗimộtphầnsẽchứamộthoặcnhiềukhốimãhoặc dữliệunhưđược sửdụngtrongtệpmãnguồn.Tuynhiêncáckhốiđóđượcnhómlạibởibộbiêndịchvào trongcácphầnliênquan.Vídụnhưtấtcảcáckhốimãđượcnhómlại vàotrongmột phầnđượcgọilàtext,cácbiếntoàncụcđãđượckhởitạo(cùngcácgiátrịkhởitạocủa chúng)vàotrongphầndữliệu,vàcácbiếntoàncụcchưa đượckhởitạovàotrongphần bss. Cũngkháphổbiếnthườngcómộtbảngbiểutượngchứatrongnộidungcủatệpđối tượng.Nóchứatênvàđịachỉcủatấ tcảcácbiếnvàhàmđượcthamchiếutrongtệpmã nguồn.Cácphầnchứatrongbảngnàykhôngphảilúcnàocũngđầyđủvìcómộtsố biếnvàhàmđượcđịnhng hĩavàchứatrong cáctệpmãnguồnkhác.Chínhvìvậycần phảicóbộliênkếtđểthựcthixửlývấnđềnày. Quátrìnhliênkết(Linking) Tấtcảcáctệpđối tượngnhậnđượcsaub ướcthựchiệnbiêndịchđầutiênđềuphải đượctổhợplạitheomộtcáchđặcbiệttrướckhinóđượcnạpvàchạyởtrênmôitrường phầncứngđích.Nhưđãthấyởtrên, bảnthâncáctệpđốitượngcũngcóthểlàchưa hoànthiệnvìvậybộliênkếtphảixửlýđểtổhợpcáctệpđốitượngđóvớinhauvà hoànthiện nốtphầ ncònkhuyếtchocácbiếnhoặchàmthamchiếu liênthônggiữacác tệpmãnguồnđượcbiêndịchđộclập. Kếtquảđầuracủabộliênkếtlàmộttệpđốitượngm ớicóchứatấtcảmãvàdữliệu trongtệpmãnguồnvàcùngkiểuđịnhdạngtệp.Nóthựcthiđượcđiềunàybằngcáchtổ hợpmộtcáchtươngứngcácphần text,dữliệuvàphầnbss…từcáctệpđầuvàovàtạo ramộttệpđốitượngtheođịnhdạngmãmáythốngnhất.Trongqúatrìnhbộliênkết thựchiệntổhợpcác phầnnộidungtươngứngnócònthựchiệnthêmcả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ênlýthựchiệnphépnhâncũnggiốngnhưtathựchiệnphépnhânhaiđathức. Trongtrườnghợpnhânhaisốnhịphânthìmỗi phần tửlàmộtbit,bytehoặctừ.Ví dụ cụthểvớihaisốnhịphân4bittathuđượcphépnhânthựchiệnnhư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 đượcchỉcònlàsốdưvàthươngsố.Hìnhảnhvềbộnhớlưucácbiếnsốthựchiệntrong thuậttoánnàyđượcminhhoạnhưtrongHình 3 3. Hình 3 3: Thựchiệnphépchia 3. 3 Tập lệnh 3. 3.1 Cấu trúc tập lệnh CISC và RISC Hầuhếtcácvi điều khiển vàVXL nhúng cócấutrúcđượcpháttriểndựatheokiếntrúc máytínhtậplệnhphứchợpCISC(ComplexInstructionSetComputer).CISClàmộtcấu trúcx ửlýcáclệnhphứchợp,tứclàmộtlệnhphứchợpsẽbaogồmmộtvàilệnhđơn. Theo. ểgặpphảikhichươngtrìnhs ử dụngcáchàmthuộcthưviệnCchuẩn. Saukhiđãhợpnhấtthànhcôngtấtcảcácthành phần mãvà phần dữliệutươngứng cũngnhưcácvấnđềvềthamchiếutới cácbiểutượngchưađượcthựcthitrongquá trìnhbiêndịchđơnlẻ,bộliênkếtsẽtạoramộtbảnsaođặcbiệtcủachươngtrìnhcó khảnăngđịnhvịlại(relocatable). Haynóicáchkhác,chươngtrìnhđượchoànthiện ngoạitrừmột điều: Khôngcóđịachỉbộnhớnàochưađượcgánbêntrongcác phần mã vàdữliệu.Nếuchúngtakhôngphảilàđangpháttriể n phần mềmcho hệ nhúng thì quátrìnhbiêndịchcóthểkếtthúctạiđây.Tuynhiên,với hệ nhúng ngaycả hệ thống nhúng đãbaogồmcả hệ điều hành chúngta vẫncầnphải có mộtmã chươngtrình (image)nhịphânđượcđịnhvịtuyệtđối.Thựctếnếucómột hệ điều hànhthì phần mã vàdữ