前兩天感冒去醫(yī)院,本想就是拿點(diǎn)藥吃吃??墒且粯菕焯?hào)、二樓看門診開藥、回到一樓付費(fèi)、最后到藥房取藥,在沒(méi)有多少病人需要排隊(duì)的情況下足足花了我半小時(shí)時(shí)間??墒侨绻氐蕉昵暗泥l(xiāng)村醫(yī)院,只需找到全村都熟知的大夫,說(shuō)明來(lái)意、取藥、付費(fèi)到走人五分鐘即可搞定。我很清楚,現(xiàn)在醫(yī)院的這種由指示牌引導(dǎo)病人從一個(gè)地點(diǎn)走向另一個(gè)地點(diǎn)、順序固定的流程化操作對(duì)于處理大流量病人的時(shí)候是高效的,但在另一些情況又是低效的。 同樣,CPU、MCU、DSP等處理器不就是采用由MOS管等構(gòu)成的基本門電路按照一定的架構(gòu)(比如馮.諾依曼架構(gòu)、arm架構(gòu)等)、順序搭建而成能夠控制電流沿著一定路線、時(shí)序流動(dòng)從而可以處理由C語(yǔ)言所描述的算法的硬件數(shù)字電路嗎?它對(duì)于處理某些算法是高效的,但對(duì)于另一些算法的處理卻未必高效,比如信號(hào)、圖像、視頻等。既然連馮.諾依曼架構(gòu)的處理器都不能高效處理的這些算法,該如何處理呢?答案就是采用基本門電路自己搭建這樣的硬件電路。當(dāng)然,可不是讓您到電子元器件市場(chǎng)采購(gòu)上千萬(wàn)與、或、非門回家手動(dòng)連接哦!而是采用FPGA。 您可以認(rèn)為FPGA就是一個(gè)巨大無(wú)比的容器,里面藏有千萬(wàn)數(shù)量級(jí)的基本門電路,并且排列有序。有些FPGA中除了有這些基本資源之外,還含有DSP、PowerPC、ARM處理器等。所以您可以采用這樣的FPGA很方便的實(shí)現(xiàn)一個(gè)片上系統(tǒng)(SOC)。不要擔(dān)心這些資源之間如何連接,因?yàn)樵谶@些基本門電路以及其它資源之間存在長(zhǎng)短不同的斷開的連接線,您只需要選取想要的資源將對(duì)應(yīng)的連接線連上就可以了。是不是在一頭霧水的想,那得多大的一個(gè)顯微鏡來(lái)幫忙才能完成這些線的連接呀?況且我的數(shù)字電路知識(shí)早還給老師了,根本不知道該如何用這些基本元器件搭建那么復(fù)雜的圖像處理算法! 哈哈…,您又想多了。 首先,您連放大鏡都不需要,會(huì)有一個(gè)軟件的開發(fā)環(huán)境協(xié)助您的工作,如果您用的是Xlinx的FPGA芯片,對(duì)應(yīng)的開發(fā)環(huán)境就是ISE或者Vivado;另外,您也不需要很清楚專業(yè)的數(shù)字電路知識(shí),只需要使用硬件描述語(yǔ)言(HDL)描述您的算法,集成在ISE里的綜合工具會(huì)將您的算法綜合成為基本門電路連接而成的邏輯網(wǎng)表。如果您用的是verilogHDL,其語(yǔ)法很像C語(yǔ)言哦!綜合出來(lái)的邏輯網(wǎng)表經(jīng)過(guò)一個(gè)映射和布局布線的過(guò)程之后就可編譯成為一個(gè)bit文件,使用下載工具通過(guò)JTAG口下載到FPGA,您的系統(tǒng)就可以工作了。當(dāng)然在編譯之前還需要將系統(tǒng)的IO口和FPGA的IO對(duì)應(yīng)起來(lái)。 看來(lái)使用FPGA還是比較容易的,復(fù)雜的地方都有EDA工具幫我實(shí)現(xiàn)了,只需要熟悉VHDL或者verilogHDL硬件描述語(yǔ)言就可以搞定了嘛!不過(guò),可能是中學(xué)學(xué)英語(yǔ)烙下了恐懼癥,提到學(xué)習(xí)語(yǔ)言就有點(diǎn)頭痛。如果有個(gè)智能的工具連代碼都幫我搞定了那才是真正的爽啊! 說(shuō)了那么多,其實(shí)我最想跟大家聊的是HDL代碼生成。 用手寫代碼來(lái)描述算法過(guò)程是痛苦的,debug起來(lái)也不方便,更要命的是,整了好久擠出一批代碼,結(jié)果發(fā)現(xiàn)需求文檔有問(wèn)題。還有比更要命還要命的,寫需求那幫家伙不承認(rèn)文檔有誤,說(shuō)是我理解問(wèn)題。有沒(méi)搞錯(cuò),我可是玩代碼的,能用abc…外加一些亂七八糟的符號(hào)把一幅模糊的圖片變清晰了,可想有多聰明呀!吵也沒(méi)用,代碼還得重寫呀!問(wèn)題到底出在哪里了呢…?答案很簡(jiǎn)單,您的開發(fā)模式有問(wèn)題。為什么那么老土用Office來(lái)描述您的需求呢?Office除了能幫您檢查出幾個(gè)錯(cuò)別字之外,它能幫您驗(yàn)證功能缺陷?可以使用Simulink、Stateflow、MATLAB Function外加一些信號(hào)處理和圖像處理模塊在模型里實(shí)現(xiàn)您的需求和算法呀!并且從需求開始就可以通過(guò)仿真來(lái)驗(yàn)證功能。大量的輸入激勵(lì)源、各種仿真觀測(cè)模塊,更重要的是還有Simulink Verification & Validation和Simulink Design Verifier這樣的工具箱幫助在模型階段進(jìn)行動(dòng)態(tài)和靜態(tài)測(cè)試與分析,最大程度的保證系統(tǒng)算法安全可靠。原來(lái)還有這么好的工具呀?好了,我的需求和設(shè)計(jì)在模型里驗(yàn)證沒(méi)問(wèn)題了,現(xiàn)在總算真正理解了需求了吧?再也不理那幫寫需求文檔的家伙了。開始寫我的代碼嘍…,還好距離代碼交付還有幾個(gè)月,寫完加上debug測(cè)試時(shí)間應(yīng)該還來(lái)得及,大不了犧牲幾個(gè)周末吧!等等,別犯傻了,為啥不用HDL代碼生成工具呢?不僅不會(huì)犧牲周末,還可放兩月假!那又是個(gè)什么鬼? HDL代碼生成工具可以將您在Simulink模型里所描述的算法生成硬件描述語(yǔ)言,VHDL或verilogHDL。因?yàn)?/span>FPGA處理的都是定點(diǎn)數(shù)據(jù),所以在生成HDL代碼之前需要對(duì)模型進(jìn)行定點(diǎn)化處理,否則所生成的代碼是不可綜合的。另外,并不是所有的Simulink模塊都支持HDL代碼生成,所以如果決定做HDL代碼生成的話需要有選擇的使用Simulink模塊。在MATLAB命令行輸入如下命令所彈出的子庫(kù)都是支持HDL代碼生成的。HDL代碼生成之前需要對(duì)模型做些設(shè)置,可以使用MATLAB函數(shù)“hdlsetup >>hdllib HDL代碼生成工具除了生成代碼,還可生成便于查看代碼的html報(bào)告。從報(bào)告中很方便的實(shí)現(xiàn)模型到代碼的雙向追蹤。 HDL代碼生成工具可以自動(dòng)生成testbench用于測(cè)試所生成的HDL代碼。而testbench的輸入激勵(lì)數(shù)據(jù)恰恰是在Simulink中對(duì)算法進(jìn)行仿真的數(shù)據(jù)。有效的重用了需求階段的驗(yàn)證數(shù)據(jù)。 HDL代碼生成工具可以生成用于編譯和硬件描述語(yǔ)言在第三方仿真工具下仿真的tcl腳本。這樣您可以在ModelSim環(huán)境運(yùn)行這些腳本實(shí)現(xiàn)代碼的快速編譯和仿真。 HDL代碼生成工具可以方便的在模型中實(shí)現(xiàn)速度和面積的優(yōu)化。通過(guò)環(huán)境設(shè)置可以在MATLAB環(huán)境調(diào)用第三方的綜合和布局布線工具對(duì)所生成的代碼進(jìn)行綜合以及布局布線。從產(chǎn)生的報(bào)告中獲取時(shí)延及資源使用信息,并計(jì)算且高亮顯示Simulink模型中的關(guān)鍵路徑。您可以通過(guò)添加Pipeline的方法實(shí)現(xiàn)速度的優(yōu)化。同時(shí),也可以通過(guò)SharingFactor和StreamingFactor設(shè)置實(shí)現(xiàn)面積優(yōu)化。在模型中所做的優(yōu)化不會(huì)改變?cè)兴惴ǎ梢酝ㄟ^(guò)生成驗(yàn)證模型加以驗(yàn)證。 對(duì)于一些需要使用MATLAB function模塊集成MATLAB函數(shù)所實(shí)現(xiàn)的算法,可以使用HDLCoder所提供的MATLAB設(shè)計(jì)模板庫(kù)進(jìn)行改寫。可以通過(guò)如下命令打開這個(gè)設(shè)計(jì)模板庫(kù): >>eml_hdl_design_patterns HDL代碼生成工具可以產(chǎn)生黑盒接口用于集成用戶手寫HDL代碼或IP。在Simulink模型中通過(guò)子系統(tǒng)進(jìn)行占位并作適當(dāng)?shù)脑O(shè)置就可以生成模塊接口。 可以在MATLAB環(huán)境實(shí)現(xiàn)聯(lián)合仿真。將模型中的某個(gè)子系統(tǒng)生成硬件描述語(yǔ)言在ModelSim或FPGA中仿真或運(yùn)行,其它部分在Simulink中運(yùn)行,從而驗(yàn)證模型和所生成代碼的等效性。 |
|
來(lái)自: wanglh5555 > 《待分類》