摘要:美國(guó)思科公司總裁約翰·錢伯斯他在談到新經(jīng)濟(jì)的規(guī)律時(shí)說(shuō),現(xiàn)代競(jìng)爭(zhēng)已經(jīng)不是大魚吃小魚,而是快的吃慢的.在現(xiàn)代競(jìng)爭(zhēng)中,,效率有著決定性的作用。專業(yè)的燒錄器廠商是如何做到比山寨燒錄產(chǎn)品的快呢,?
美國(guó)思科公司總裁約翰·錢伯斯他在談到新經(jīng)濟(jì)的規(guī)律時(shí)說(shuō),現(xiàn)代競(jìng)爭(zhēng)已“不是大魚吃小魚,而是快的吃慢的.”在現(xiàn)代競(jìng)爭(zhēng)中,,效率有著決定性的作用。
做嵌入式開(kāi)發(fā)的工程師都知道,,一旦產(chǎn)品需要量產(chǎn),,批量生產(chǎn)的燒錄器必不可少。在調(diào)試階段,,工程師可以用串口下載來(lái)實(shí)現(xiàn)代碼的燒錄,,如果用串口進(jìn)行生產(chǎn),工廠是絕不會(huì)允許的,,因?yàn)樾蕦?shí)在太低,。
燒錄器的功能,主要對(duì)非易失性的存儲(chǔ)器進(jìn)行操作(MCU內(nèi)部Flash也都是各類非易失性的存儲(chǔ)器),。這些存儲(chǔ)器通常都需要擦除,、編程和校驗(yàn)。這些基本操作和一些控制設(shè)置操作,,是燒錄的主要內(nèi)容,。
通常情況下,這些操作都是依次執(zhí)行的,,先擦除,,擦除完成后,對(duì)存儲(chǔ)器進(jìn)行加電編程,,編程完成后,,再對(duì)編程的部分進(jìn)行校驗(yàn)、對(duì)比。這些步驟都是環(huán)環(huán)相扣,,一步一步實(shí)現(xiàn)的,,串行的處理效率是很低的。正如,,一個(gè)人處理一件事忙不過(guò),,那么兩個(gè)人三個(gè)人一起來(lái)呢,效率立即提高3倍,。
一步一步實(shí)現(xiàn)的方式,,就是目前市面上很多山寨燒錄器的做法,效率低下,。
圖1山寨的燒錄器
專業(yè)燒錄器廠商,,不僅提高燒錄時(shí)的工作頻率,而且命令之間也盡量提高并行度,,以達(dá)到效率最大化,。
稍微思考下,就會(huì)發(fā)現(xiàn),,燒錄器在編程過(guò)程中是按照這樣一個(gè)順序執(zhí)行的:從上位機(jī)取命令數(shù)據(jù)→命令解析→執(zhí)行,。這個(gè)過(guò)程是一個(gè)按順序循環(huán)執(zhí)行的,對(duì)應(yīng)的操作為取指,、譯碼和執(zhí)行,,解釋如下:
取指----從命令FIFO中取出指令。
譯碼----根據(jù)指令,,產(chǎn)生對(duì)應(yīng)的控制信號(hào),。
執(zhí)行----執(zhí)行擦除、編程或者檢驗(yàn)操作,,或者設(shè)置相關(guān)參數(shù),。
如果沒(méi)有采用流水線技術(shù),時(shí)空?qǐng)D如圖2所示,。
圖2無(wú)流水線時(shí)空?qǐng)D
從圖2可知,,每條命令都要經(jīng)過(guò)取指、譯碼和執(zhí)行后才能進(jìn)行下一條命令,,這嚴(yán)重影響系統(tǒng)的效率,。最致命的是,取指,、譯碼和執(zhí)行都不能同時(shí)工作,,只有完成取指之后才能譯碼,,譯碼之后才能執(zhí)行,。
因此,燒錄器做出了改變,采用了“流水線”技術(shù),。根據(jù)編程器的操作步驟,,可以把工作流程分為取指、譯碼和執(zhí)行三部分,,每一部分負(fù)責(zé)自己的工作,。這樣不僅細(xì)化了整個(gè)工作流程,而且能夠使三部分同時(shí)工作,,從而提高了并行度,,進(jìn)而提高了工作效率。在FPGA硬件實(shí)現(xiàn)上,,這三部分分別對(duì)應(yīng)三個(gè)電路,,并且在它們之間都插入寄存器組,組成三級(jí)流水線,,如圖3所示,。這樣,在每個(gè)時(shí)鐘周期下,,取指,、譯碼和執(zhí)行部分同時(shí)使用上級(jí)傳下來(lái)的數(shù)據(jù)工作,并且在下一個(gè)周期把結(jié)果傳給寄存器以供下一級(jí)電路使用,。在這個(gè)過(guò)程中,,寄存器起到了暫存結(jié)果的作用。
圖3 流水線電路示意圖
采用流水線技術(shù)的時(shí)空?qǐng)D如圖4所示,。
圖4流水線時(shí)空?qǐng)D
從圖4中可知,,相關(guān)的命令執(zhí)行在時(shí)間上是交疊在一起的,也就是說(shuō)三條命令同時(shí)工作(經(jīng)過(guò)首次延遲之后),!比如,,在時(shí)刻T4,指令N+3在取值,,指令N+2在譯碼,,指令N+1執(zhí)行。值得注意的是,,在某一時(shí)刻,,它們雖然同時(shí)工作,但操作的都不是同一條指令,。另外,,在每個(gè)周期,都有一條命令在“執(zhí)行”,,也就是說(shuō)一個(gè)周期產(chǎn)生一個(gè)結(jié)果,,而無(wú)流水線技術(shù)需要3個(gè)周期才有一個(gè)結(jié)果,相比之下,工作效率提高了3倍,??上驳氖牵魉€技術(shù)會(huì)提高頻率上限,。
在FPGA設(shè)計(jì)上,,需要估算取值、譯碼和之下三部分的延時(shí),,盡量做到它們之間的延時(shí)相等或者接近,,才能發(fā)揮流水線的優(yōu)勢(shì)。另外,,理論上,,流水線級(jí)數(shù)越多,工作頻率越快,,效率相對(duì)也高,。