FPGA設(shè)計(jì)經(jīng)驗(yàn)談
5)關(guān)于IP核和乒乓操作的那點(diǎn)事
本文引用地址:http://www.ex-cimer.com/article/158978.htm經(jīng)驗(yàn)告訴我,能使用開發(fā)工具自帶的IP核,就千萬別去自己開發(fā)。往往自己開發(fā)已有的IP核是吃力不討好。我曾經(jīng)做過一個(gè)eMMC控制器燒寫外部eMMC芯片的案子。
數(shù)據(jù)由上位機(jī)通過USB傳給MCU,然后通過數(shù)據(jù)總線發(fā)到FPGA,在FPGA內(nèi)部形成燒寫eMMC芯片的時(shí)序,燒寫外部芯片。框圖如下:

最初的算法是通過數(shù)據(jù)總線發(fā)一個(gè)字節(jié),再向芯片打一個(gè)字節(jié),一個(gè)頁的512字節(jié)的CRC16需要事先用軟件計(jì)算好,但是這種方式燒寫速度太慢。后來我想到一種方案,先把512個(gè)字節(jié)傳到FPGA內(nèi)部存儲起來,并且在FPGA內(nèi)部計(jì)算好16個(gè)字節(jié)的CRC,然后用高速系統(tǒng)時(shí)鐘一次性把整頁528個(gè)字節(jié)傳給芯片,這種方式燒寫速度能提高很多。一開始我想自己設(shè)計(jì)一個(gè)帶CRC計(jì)算的RAM或者FIFO來存儲528個(gè)字節(jié)的數(shù)據(jù),可是無論怎么設(shè)計(jì)數(shù)據(jù)傳輸總是有問題,由于是一個(gè)人做,也沒人指導(dǎo),只得放棄這種方案,改用其他。因?yàn)槲矣玫腦ilinx器件有現(xiàn)成的FIFO核可以調(diào)用,于是我就把CRC16的計(jì)算和存儲512字節(jié)數(shù)據(jù)分開設(shè)計(jì),在最后輸出到芯片端再選通。因?yàn)闊龑慹MMC一個(gè)頁,需要有一定的等待POLLING時(shí)間,所以我想到了用兩組FIFO,乒乓操作,A通道數(shù)據(jù)發(fā)送到芯片并且等待應(yīng)答的時(shí)候,MCU端向B通道發(fā)送數(shù)據(jù)存儲,B通道數(shù)據(jù)發(fā)送到芯片并且等待應(yīng)答的時(shí)候,MCU端再向A通道發(fā)送數(shù)據(jù)存儲,這樣最大化的加速了燒寫速度,當(dāng)然最后的設(shè)計(jì)結(jié)果我也是相當(dāng)滿意的。

我想通過此例告訴大家的是,盡量用系統(tǒng)的IP核吧,省事又省心,因?yàn)檫@些都是前輩專家們設(shè)計(jì)出的經(jīng)典。還有就是利用一些設(shè)計(jì)技巧,比如乒乓操作,流水線操作可以讓你的設(shè)計(jì)性能優(yōu)化不少。
最后簡單說一下體會吧,歸結(jié)起來就多實(shí)踐、多思考、多問。實(shí)踐出真知,看100遍別人的方案不如自己去實(shí)踐一下。實(shí)踐的動力一方面來自興趣,一方面來自壓力,我個(gè)人覺得后者更重要。有需求會容易形成壓力,也就是說最好能在實(shí)際的項(xiàng)目開發(fā)中鍛煉,而不是為了學(xué)習(xí)而學(xué)習(xí)。在實(shí)踐的過程中要多思考,多想想問題出現(xiàn)的原因,問題解決后要多問幾個(gè)為什么,這也是經(jīng)驗(yàn)積累的過程,如果有寫項(xiàng)目日志的習(xí)慣更好,把問題及原因、解決的辦法都寫進(jìn)去。最后還要多問,遇到問題思索后還得不到解決就要問了,畢竟個(gè)人的力量是有限的,問同學(xué)同事,問搜索引擎,問網(wǎng)友,都可以,一篇文章、朋友們的點(diǎn)撥都可能幫助自己快速解決問題。
逆變器相關(guān)文章:逆變器原理
fpga相關(guān)文章:fpga是什么
可控硅相關(guān)文章:可控硅工作原理
pwm相關(guān)文章:pwm是什么
c語言相關(guān)文章:c語言教程
逆變器相關(guān)文章:逆變器工作原理
比較器相關(guān)文章:比較器工作原理
評論