




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
目錄TOC\h\z\t"標(biāo)題1,2,標(biāo)題2,3,標(biāo)題3,4,主標(biāo)題,1,標(biāo)題,1"一.背景介紹 一.背景介紹近幾十年來(lái),數(shù)字信號(hào)處理技術(shù)作為信號(hào)與信息處理學(xué)科的一個(gè)主要研究方向,在電子學(xué)、計(jì)算機(jī)、應(yīng)用數(shù)學(xué)等學(xué)科得到了廣泛的應(yīng)用,許多信號(hào)處理和控制需要用到除法算法。一般的數(shù)字信號(hào)處理器中沒(méi)有現(xiàn)成的除法指令,而是用現(xiàn)有的減法或乘法指令進(jìn)行疊加來(lái)完成除法運(yùn)算,這樣其運(yùn)算的復(fù)雜度和精確度就難以達(dá)到要求,這就致使一些帶有除法的好的算法在信號(hào)處理中難以得到應(yīng)用,嚴(yán)重影響了信號(hào)處理領(lǐng)域中的數(shù)據(jù)處理。雖然近幾十年人們花在算術(shù)運(yùn)算單元的設(shè)計(jì)越來(lái)越多,努力設(shè)計(jì)高性能的運(yùn)算單元,但是,為了提高性能所做的大部分努力都花在設(shè)計(jì)更快的加/減法器和乘法器上,除法器設(shè)計(jì)相對(duì)來(lái)說(shuō)所作的關(guān)注較少。在無(wú)線通信、語(yǔ)音通信、圖像處理等領(lǐng)域中,往往涉及大量的數(shù)據(jù)處理,而且數(shù)據(jù)計(jì)算精度和實(shí)時(shí)性要求很高,需要很高的處理能力來(lái)提高系統(tǒng)的執(zhí)行效率,Soerquist等人指出,在四中基本運(yùn)算中,除法的執(zhí)行速度最慢。雖然除法占所有運(yùn)算的比例很少,大概3%,但這并不表示除法對(duì)處理器性能的影響很小,在因?yàn)橹噶钭枞却鸬奶幚砥餍阅芟陆档囊蛩刂校ㄖ噶畲蠹s占到40%,因此設(shè)計(jì)一種執(zhí)行效率高的除法結(jié)構(gòu)具有很重要的意義。而隨著半導(dǎo)體技術(shù)的發(fā)展,F(xiàn)PGA逐漸步入人們的視野,成為系統(tǒng)設(shè)計(jì)的首選,本設(shè)計(jì)就是基于FPGA實(shí)現(xiàn)各種除法算法,那什么是FPGA?又為什么選擇FPGA呢?FPGA(Field-ProgrammableGateArray),即現(xiàn)場(chǎng)可編程門(mén)陣列,它是在PAL、GAL、CPLD等可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物。它是作為專(zhuān)用集成電路(ASIC)領(lǐng)域中的一種半定制電路而出現(xiàn)的,既解決了定制電路的不足,又克服了原有可編程器件門(mén)電路數(shù)有限的缺點(diǎn)。以硬件描述語(yǔ)言(Verilog或VHDL)所完成的電路設(shè)計(jì),可以經(jīng)過(guò)簡(jiǎn)單的綜合與布局,快速的燒錄至FPGA上進(jìn)行測(cè)試,是現(xiàn)代IC設(shè)計(jì)驗(yàn)證的技術(shù)主流。這些可編輯元件可以被用來(lái)實(shí)現(xiàn)一些基本的邏輯門(mén)電路(比如AND、OR、XOR、NOT)或者更復(fù)雜一些的組合功能比如解碼器或數(shù)學(xué)方程式。在大多數(shù)的FPGA里面,這些可編輯的元件里也包含記憶元件例如觸發(fā)器(Flip-flop)或者其他更加完整的記憶塊。FPGA一般來(lái)說(shuō)比ASIC(專(zhuān)用集成電路)的速度要慢,實(shí)現(xiàn)同樣的功能比ASIC電路面積要大。但是他們也有很多的優(yōu)點(diǎn)比如可以快速成品,可以被修改來(lái)改正程序中的錯(cuò)誤和更便宜的造價(jià)。廠商也可能會(huì)提供便宜的但是編輯能力差的FPGA。因?yàn)檫@些芯片有比較差的可編輯能力,所以這些設(shè)計(jì)的開(kāi)發(fā)是在普通的FPGA上完成的,然后將設(shè)計(jì)轉(zhuǎn)移到一個(gè)類(lèi)似于ASIC的芯片上。另外一種方法是用CPLD(ComplexProgrammableLogicDevice,復(fù)雜可編程邏輯器件)。主要特點(diǎn):①采用FPGA設(shè)計(jì)ASIC電路(專(zhuān)用集成電路),用戶不需要投片生產(chǎn),就能得到合用的芯片。②FPGA可做其它全定制或半定制ASIC電路的中試樣片。③FPGA內(nèi)部有豐富的觸發(fā)器和I/O引腳。④FPGA是ASIC電路中設(shè)計(jì)周期最短、開(kāi)發(fā)費(fèi)用最低、風(fēng)險(xiǎn)最小的器件之一。⑤FPGA采用高速CMOS工藝,功耗低,可以與CMOS、TTL電平兼容。FPGA是由存放在片內(nèi)RAM中的程序來(lái)設(shè)置其工作狀態(tài)的,因此,工作時(shí)需要對(duì)片內(nèi)的RAM進(jìn)行編程。用戶可以根據(jù)不同的配置模式,采用不同的編程方式。加電時(shí),F(xiàn)PGA芯片將EPROM中數(shù)據(jù)讀入片內(nèi)編程RAM中,配置完成后,F(xiàn)PGA進(jìn)入工作狀態(tài)。掉電后,F(xiàn)PGA恢復(fù)成白片,內(nèi)部邏輯關(guān)系消失,因此,F(xiàn)PGA能夠反復(fù)使用。FPGA的編程無(wú)須專(zhuān)用的FPGA編程器,只須用通用的EPROM、PROM編程器即可。當(dāng)需要修改FPGA功能時(shí),只需換一片EPROM即可。這樣,同一片F(xiàn)PGA,不同的編程數(shù)據(jù),可以產(chǎn)生不同的電路功能。因此,F(xiàn)PGA的使用非常靈活。1984年,Xilinx公司推出了世界上第一個(gè)FPAG芯片,其目標(biāo)是將LS工/VLSI門(mén)陣列技術(shù)的高密度和通用性和現(xiàn)場(chǎng)可編程邏輯器件的設(shè)計(jì)靈活及產(chǎn)品的有效性結(jié)合起來(lái)。他的特點(diǎn)是:復(fù)雜互連、性能依賴于設(shè)計(jì)和較高的邏輯密度。適于通信設(shè)備中復(fù)雜數(shù)據(jù)通路和工業(yè)控制的數(shù)據(jù)采集系統(tǒng)。隨著CAD開(kāi)發(fā)工具功能的日漸完善以及FPGA的優(yōu)良性能日益顯露,F(xiàn)PGA己經(jīng)受到廣大電子科技人員的普遍重視并得到了越來(lái)越為廣泛的應(yīng)用?,F(xiàn)今,利用FPGA來(lái)進(jìn)行系統(tǒng)集成設(shè)計(jì)己成為一種極為普遍的現(xiàn)象。用FPGA來(lái)實(shí)現(xiàn)除法主要有以下兒幾點(diǎn)優(yōu)點(diǎn):1)FGPA非常適合于各種算術(shù)運(yùn)算,包括含有大量乘、加運(yùn)算的數(shù)字信號(hào)處理算法。充分利用硬件資源,并在性能上超過(guò)其他的器件。2)相對(duì)于單片機(jī)和DPS處理器而言,F(xiàn)GPA可以由設(shè)計(jì)者根據(jù)算法的內(nèi)在結(jié)構(gòu)設(shè)計(jì)合適的處理陣列,避免前者串行執(zhí)行指令的低效。3)相對(duì)ASCI而言,采用FPGA可避免初期巨大的開(kāi)發(fā)投資,同時(shí)擁有微處理器的通用性和靈活性。在算法修改時(shí),短時(shí)間內(nèi)就將新的算法付諸實(shí)際。當(dāng)然由于FPGA仍然屬于通用器件,效率比ASIC低,但其靈活性的優(yōu)勢(shì)仍然可以很大程度上彌補(bǔ)其缺點(diǎn)。因此利用FPGA完成快速除法器的算法是一種方便、快捷、最具優(yōu)勢(shì)的優(yōu)化設(shè)計(jì)方案?;谏鲜鲈颍肍PGA來(lái)實(shí)現(xiàn)快速除法器算法這一設(shè)計(jì)思想將具有十分重要的應(yīng)用價(jià)值。二.設(shè)計(jì)要求與任務(wù)除法器設(shè)計(jì)以下兩種要求任選一種設(shè)計(jì)一個(gè)除法器,能在Basys2開(kāi)發(fā)板上實(shí)際運(yùn)行。被除數(shù)為16位,除數(shù)為8位,被除數(shù)和除數(shù)都用按鍵輸入,結(jié)果用數(shù)碼管顯示,設(shè)置一個(gè)使能開(kāi)關(guān),開(kāi)關(guān)朝上撥時(shí)才進(jìn)行運(yùn)算。由于數(shù)碼管和按鍵等資源數(shù)量較少,因此可以考慮采取下面的方案實(shí)現(xiàn)。LD2LD1LD0指示狀態(tài),000是起始狀態(tài),001用于輸入被除數(shù)高8位,010用于輸入被除數(shù)低8位,011用于輸入除數(shù)(8位),100用于顯示結(jié)果,101用于顯示被除數(shù)和除數(shù)btn1和btn0和數(shù)碼管配合,用于改變準(zhǔn)備輸入的數(shù)據(jù)btn2用于將數(shù)碼管顯示的數(shù)據(jù)輸入到相應(yīng)的地方,同時(shí)切換狀態(tài)。btn3的功能也是切換狀態(tài),如果用btn3切換狀態(tài),則不改變?cè)瓉?lái)的數(shù)據(jù)。sw6如果為1表示允許進(jìn)行除法運(yùn)算,為0則表示不允許。因?yàn)長(zhǎng)D2-LD0為100和101時(shí)需要顯示6位16進(jìn)制數(shù),而數(shù)碼管只有4個(gè),所以用sw7進(jìn)行切換。LD2-LD0為100時(shí),sw7為0時(shí)顯示商,為1時(shí)顯示余數(shù),LD2-LD0為101時(shí),sw7為0時(shí)顯示被除數(shù),為1時(shí)顯示除數(shù)。②設(shè)計(jì)一個(gè)除法器,能在Basys2開(kāi)發(fā)板上實(shí)際運(yùn)行。被除數(shù)為16位,除數(shù)為8位,被除數(shù)和除數(shù)都用按鍵輸入,結(jié)果用數(shù)碼管顯示,設(shè)置一個(gè)使能開(kāi)關(guān),開(kāi)關(guān)朝上撥時(shí)才進(jìn)行運(yùn)算。由于數(shù)碼管和按鍵等資源數(shù)量較少,因此可以考慮采取下面的方案實(shí)現(xiàn)。使用2個(gè)開(kāi)關(guān)決定狀態(tài),例如SW1和SW0,SW1-SW0為00時(shí)用于輸入被除數(shù),通過(guò)4個(gè)按鍵輸入4位16進(jìn)制數(shù),輸入的數(shù)通過(guò)數(shù)碼管顯示;01時(shí)用于輸入除數(shù),通過(guò)2個(gè)按鍵輸入2位16進(jìn)制數(shù),輸入的數(shù)通過(guò)數(shù)碼管顯示;10時(shí)顯示商;11時(shí)顯示余數(shù)。我們選擇第二種方案。三.現(xiàn)有的除法算法MichaelJ.Flynn與StuartF.0berman按照硬件操作的不同將浮點(diǎn)數(shù)除法算法分為5大類(lèi):數(shù)值循環(huán)法(digitrecurrence)、Newton-Raphson算法、Talyor級(jí)數(shù)展開(kāi)法、高基數(shù)法(veryhighradix)、以及可變延遲法(variablelatency)等。1.?dāng)?shù)值循環(huán)法(DigitRecurrence)該算法的實(shí)現(xiàn)主要有三種方法:恢復(fù)余數(shù)算法、不恢復(fù)余數(shù)算法以及SRT算法。大多數(shù)除法器都是采用數(shù)值循環(huán)算法,純數(shù)學(xué)意義的整數(shù)除法的原始表達(dá)式如下:式(3-1)中,Z是被除數(shù),d是除數(shù),Q是商,R是余數(shù)。根據(jù)整數(shù)除法的定義,余數(shù)R需要滿足兩個(gè)條件:①絕對(duì)值小于除數(shù),②與被除數(shù)同號(hào)(0除外)。在實(shí)際的運(yùn)算過(guò)程中,商Q是逐位產(chǎn)生的,不妨把Q與Z寫(xiě)成逐位相加的形式:其中qk-1,qk-2···q0就是在運(yùn)算過(guò)程中逐個(gè)產(chǎn)生的商位(digit),r為基數(shù)(radix)。把式(3-2)代入式(3-1),就得到:式(3-3)可以進(jìn)一步改寫(xiě)為如下形式:式(3-4)具備了循環(huán)迭代的形式,如果再設(shè)置一個(gè)中間變量W[j],那么式(3-4)又可以改寫(xiě)成式(3-5):式(3-5)反映了DigitRecurrence算法的一般實(shí)現(xiàn)方式,我們稱它為一般迭代公式,它顯示了被除數(shù)通過(guò)多輪的減法運(yùn)算最終得到余數(shù),并在中間運(yùn)算中逐位產(chǎn)生商的過(guò)程。式中的中間變量W[j]是過(guò)程余數(shù),它是被除數(shù)(輸入)與余數(shù)(輸出)之間的中間形式。DigitRecurrence算法大體上都具有式(3-5)的形式。對(duì)于不同的實(shí)現(xiàn)可以選取不同的參數(shù),例如基數(shù)r,商位qj的取值范圍等等。這些參數(shù)不同時(shí),循環(huán)需要的次數(shù)k也不同。2.Newton-Raphson除法算法牛頓迭代法是將非線性方程線性化,從而得到迭代序號(hào)的一種方法。它的基本思想是用乘法代替除法運(yùn)算,例如a/b=a×(1/b),如何計(jì)算1/b是牛頓迭代算法的核心所在。對(duì)于方程f(X)=0,設(shè)x0為它的一個(gè)近似根,如圖3-1,則函數(shù)f(x)在x0附近截?cái)喔叽雾?xiàng)可用一階泰勒多項(xiàng)式展開(kāi)為:f(X)=f(x0)+f'(x0)(X-x0)(3-6)圖3-1Newton-Raphson除法算法牛頓迭代法可以描述成求解f(X)=0,具體可以歸納成以下幾個(gè)步驟:第一步:設(shè)函數(shù)f(X)在x0處的值是Y0,則f(x0)=Y0第二步:在點(diǎn)(x0,Y0)處做切線與X軸的交點(diǎn)為x1,與Y軸的交點(diǎn)為Y1。第三步:根據(jù)一階泰勒公式有f第四步:根據(jù)第三步公式可得x第五步:以x1為下一次的逼近值,依次類(lèi)推可得f(X)=0的解牛頓迭代中,函數(shù)原型的的選擇非常的重要,其決定著倒數(shù)結(jié)果的形式,在多種函數(shù)原型中應(yīng)用最廣泛的是1X,在除法算法中我們所需求的商位Q=1Q=3.Talyor級(jí)數(shù)展開(kāi)法將一個(gè)函數(shù)展開(kāi)成泰勒級(jí)數(shù),直接展開(kāi)法可按下列步驟進(jìn)行:第一步:求出函數(shù)的各階導(dǎo)數(shù)f'(x),f'(x),···f(n)(x),···,第二步:求函數(shù)f(x)及其各階導(dǎo)數(shù)在f(x0),f'(x0),f'(x0),···,f(n)(x0),···,第三步:寫(xiě)出泰勒級(jí)數(shù)4.高基數(shù)法在整數(shù)表示中,對(duì)于整數(shù)N,各個(gè)位上的數(shù)值是nm、nm-1、nm-2…n1、n0,則N可以表示成N=nmrm+nm-1rm-1+nm-2rm-2+…+n1r1+n0r0,其中的r在高基數(shù)的除法中,每次除法循環(huán)可以得到較多位數(shù)的二進(jìn)制商,但是這種一次性得到很多位商的算法是以硬件資源消耗和速度的減慢為代價(jià)的,為了把各種算法的優(yōu)勢(shì)和硬件資源以及速度能夠有一個(gè)很好的平衡,提出了這種高基數(shù)算法,即最大程度的發(fā)揮一次循環(huán)產(chǎn)生較多位商的優(yōu)點(diǎn),又盡可能的減少硬件資源和硬件的時(shí)間延遲來(lái)提高速度。該算法同Talyor級(jí)數(shù)展開(kāi)法一樣建立在乘法操作,加法操作,查找表的基礎(chǔ)之上。四.硬件及軟件環(huán)境概述1.XilinxFPGA的硬件基本結(jié)構(gòu)Xilinx公司生產(chǎn)的FPGA基本內(nèi)部結(jié)構(gòu)大致可以劃分為六個(gè)部分:可編程輸入輸出單元、基本可編程邏輯單元、完整的時(shí)鐘管理、嵌入塊式RAM、豐富的布線資源、內(nèi)嵌的底層功能單元和專(zhuān)用硬件模塊。1、可編程輸入輸出單元(IOB)可編程輸入/輸出單元簡(jiǎn)稱I/O單元,是芯片與外界電路的接口電路,外部輸入的信號(hào)可以通過(guò)IOB模塊的存儲(chǔ)單元輸入到FPGA的內(nèi)部,也可以直接輸入到FPGA內(nèi)部。IOB模塊不僅完成基本的I/O口功能,它通過(guò)把IOB模塊劃分成不同的組,能夠獨(dú)立的支持不同的I/O口標(biāo)準(zhǔn)。2、基本可編程邏輯單元(CLB)基本可編程邏輯單元是FPGA內(nèi)的基本邏輯單元。FPGA芯片由大量的CLB單元和其它的一些模塊組成。一個(gè)CLB基本單元包含一個(gè)可配置開(kāi)關(guān)矩陣,此矩陣由4或6個(gè)輸入、一些選型電路(多路復(fù)用器等)和觸發(fā)器組成,另外每個(gè)CLB單元都會(huì)由多個(gè)相同的Slice和附加邏輯構(gòu)成。每個(gè)CLB模塊都含有4個(gè)Slice模塊,Slice是Xilinx公司定義的基本邏輯單元,一個(gè)Slice由兩個(gè)4/6是輸入的查找表、算術(shù)邏輯、進(jìn)位邏輯、存儲(chǔ)邏輯和函數(shù)發(fā)生器組成。每一款FPGA的CLB數(shù)量和特性會(huì)根據(jù)其功能不同而有差別,但是每一個(gè)CLB模塊的都可以配置用來(lái)完成組合電路、時(shí)序電路等,這就決定了FPGA強(qiáng)大的功能,能夠?qū)崿F(xiàn)各種簡(jiǎn)單的、復(fù)雜的邏輯電路,并且靈活,容易配置。3、完整的時(shí)鐘管理(DCM)Xilinx公司生產(chǎn)的FPGA都會(huì)自帶一個(gè)數(shù)字時(shí)鐘管理模塊,這個(gè)模塊提供數(shù)字時(shí)鐘管理和相位環(huán)路鎖定功能,常利用DCM或PLL可以進(jìn)行分頻或倍頻以及相位移動(dòng)等操作。DCM實(shí)際上可以稱作管理時(shí)鐘的硬核,硬件資源已有,我們用時(shí)只需進(jìn)行簡(jiǎn)單的軟件參數(shù)設(shè)置即可,使用很方便。4、嵌入塊式RAM很多的FPGA都內(nèi)嵌有RAM模塊,這些RAM塊可以由用戶自由進(jìn)行配置,可以把它配置成單端口RAM、雙端口RAM、內(nèi)容地址存儲(chǔ)器(CAM)或者FIFO等存儲(chǔ)器,其中的CAM在路由交換領(lǐng)域有廣泛的應(yīng)用。在基本邏輯單元Slice中的LUT,當(dāng)用戶對(duì)它進(jìn)行配置后也可以用作RAM、ROM和FIFO等存儲(chǔ)單元使用。5、豐富的布線資源布線是指把設(shè)計(jì)中用到的底層邏輯門(mén)按照一定的要求和規(guī)則進(jìn)行連接,布線資源連通FPGA芯片內(nèi)部的所有單元,所以芯片內(nèi)部有著豐富的布線資源。根據(jù)工藝、長(zhǎng)度、寬度和分布位置的不同劃分為4類(lèi):全局布線資源、長(zhǎng)線資源、短線資源、分布式布線資源。在實(shí)際的使用中,布線是通過(guò)布局布線器完成的。布局布線器根據(jù)輸入的邏輯網(wǎng)表的拓?fù)浣Y(jié)構(gòu)和約束條件自動(dòng)的連通所用到的各個(gè)邏輯單元模塊,這些邏輯網(wǎng)表和約束條件同設(shè)計(jì)有著直接的關(guān)系,設(shè)計(jì)的繁簡(jiǎn),是否優(yōu)化直接影響布局布線的結(jié)果。6、內(nèi)嵌的底層功能單元這個(gè)模塊指的是嵌入到芯片內(nèi)的一些軟處理核,主要有DLL(DelayLockedLoop)、PLL(PhaseLockedLoop)、DSP和CPU等,這些內(nèi)嵌模塊也可以叫做內(nèi)嵌處理器(EmbededProcessor)。這些內(nèi)嵌的處理器具有豐富的功能,正因?yàn)槿绱耸沟肍PGA稱為系統(tǒng)級(jí)的設(shè)計(jì)工具。7、內(nèi)嵌專(zhuān)用硬核這里的硬核模塊是相對(duì)于軟核而言,主要指常用的一些硬核RAM快、硬核乘發(fā)器等,另外高端產(chǎn)品中內(nèi)嵌了CPU模塊并且集成了吉比特收發(fā)器(MGT)模塊。這些模塊專(zhuān)用性很強(qiáng),進(jìn)一步完善了FPGA的功能,使得FPGA向SoC(片上系統(tǒng))開(kāi)發(fā)發(fā)展。2.FPGA的開(kāi)發(fā)步驟具體的FPGA開(kāi)發(fā)是指運(yùn)用現(xiàn)代EDA開(kāi)發(fā)軟件和各種開(kāi)發(fā)工具在芯片上進(jìn)行開(kāi)發(fā)的過(guò)程,這個(gè)過(guò)程通常有一套通用的開(kāi)發(fā)流程,在具體的實(shí)踐中,這個(gè)過(guò)程中的某些步驟可以省略,但這個(gè)流程的大體方向是不會(huì)改變的,這個(gè)流程包括:電路功能設(shè)計(jì)、設(shè)計(jì)輸入、功能仿真、綜合優(yōu)化、綜合后仿真、實(shí)現(xiàn)、布局布線后仿真、板級(jí)仿真以及芯片編程與調(diào)試等,開(kāi)發(fā)流程的大體結(jié)構(gòu)如圖4-1所示:圖4-1FPGA開(kāi)發(fā)的主流程圖本設(shè)計(jì)開(kāi)發(fā)軟件采用Xilinx公司推出的設(shè)計(jì)工具套件ISEDesignSuite14.5,它的主要功能包括設(shè)計(jì)輸入、綜合、仿真、實(shí)現(xiàn)和下載,涵蓋了FPGA開(kāi)發(fā)的全過(guò)程,從功能上講,其工作流程無(wú)需借助任何第三方EDA軟件。開(kāi)發(fā)環(huán)境如下:圖4-2XilinxISE開(kāi)發(fā)的環(huán)境根據(jù)圖4-2,F(xiàn)PGA開(kāi)發(fā)的流程具體分為以下幾個(gè)部分:1電路功能設(shè)計(jì)電路功能設(shè)計(jì)是指在系統(tǒng)設(shè)計(jì)之前進(jìn)行的系統(tǒng)方案論證以及芯片選型等工作。根據(jù)系統(tǒng)要求選擇合理可行的方案,參考價(jià)格、功能、等參數(shù)選擇方案所需的FPGA芯片。設(shè)計(jì)一般采取自頂向下的設(shè)計(jì)思路,按功能進(jìn)行逐次向下分解,直到可以用FPGA實(shí)現(xiàn)每個(gè)模塊為止。2設(shè)計(jì)輸入設(shè)計(jì)輸入就是根據(jù)模塊所實(shí)現(xiàn)的功能,以開(kāi)發(fā)軟件所認(rèn)可的語(yǔ)言或其它方式表達(dá)出來(lái)的過(guò)程。FPGA最常用的兩種開(kāi)發(fā)方式是硬件描述語(yǔ)言(HDL)和原理圖輸入。其中硬件描述語(yǔ)言又包括VerilogHDL和VHDL兩種,它們各自有各自的一套語(yǔ)法格式,該語(yǔ)言移植性較好,使用較廣泛。3功能仿真功能仿真是指在編譯之前對(duì)用戶所設(shè)計(jì)的電路進(jìn)行邏輯功能驗(yàn)證,也叫前仿真。方法是在仿真前建立好波形測(cè)試文件,然后用仿真軟件(本設(shè)計(jì)用ISE自帶的仿真軟件ModelSim)進(jìn)行仿真,觀察仿真結(jié)果,該結(jié)果不包含任何延時(shí)只是對(duì)設(shè)計(jì)的功能性驗(yàn)證,若結(jié)果不對(duì),對(duì)設(shè)計(jì)輸入進(jìn)行改進(jìn)直到仿真結(jié)果正確。4綜合綜合是指將較高級(jí)抽象層次的描述轉(zhuǎn)化成較低級(jí)層次的描述。將源文件調(diào)入邏輯綜合軟件進(jìn)行綜合,即把語(yǔ)言綜合成最簡(jiǎn)的布爾表達(dá)式和信號(hào)的連接關(guān)系??梢岳斫鉃榘言O(shè)計(jì)輸入轉(zhuǎn)化編譯成由與門(mén)、或門(mén)、非門(mén)、RAM、觸發(fā)器等基本的邏輯單元組成的邏輯連接網(wǎng)表,并非真正的門(mén)級(jí)電路。本設(shè)計(jì)采用ISE自帶的綜合工具Synplicity)。5綜合后仿真綜合后仿真是將綜合生成的標(biāo)準(zhǔn)延時(shí)文件反標(biāo)注到綜合仿真模型中,再次利用仿真軟件進(jìn)行仿真。仿真結(jié)果報(bào)告可以估計(jì)門(mén)延時(shí)。該步驟主要還是用來(lái)檢查錯(cuò)誤。6設(shè)計(jì)實(shí)現(xiàn)與布局布線該步是指將設(shè)計(jì)好的邏輯配置放到FPGA芯片上,這個(gè)邏輯配置是指由綜合生成的邏輯網(wǎng)表。這一步真正把設(shè)計(jì)輸入語(yǔ)言與底層硬件單元聯(lián)系起來(lái)。布局布線必須采用芯片開(kāi)發(fā)商提供的工具。7時(shí)序仿真需要利用在布局布線中獲得的精確參數(shù),用仿真軟件驗(yàn)證電路的時(shí)序(也叫后仿真),該仿真包含門(mén)延時(shí)和線延時(shí),能較好的反映芯片的實(shí)際工作情況。8板級(jí)仿真和驗(yàn)證該步驟主要用在高速電路設(shè)計(jì)中,一般都要用到第三方軟件作為工具。9編程下載編程下載是指將生成的比特流文件下載到芯片中進(jìn)行驗(yàn)證,可以借助第三方軟件進(jìn)行硬件測(cè)試以檢查設(shè)計(jì)的實(shí)現(xiàn)與否。五.設(shè)計(jì)過(guò)程整體結(jié)構(gòu)如圖5-1所示:圖5-1整體結(jié)構(gòu)圖程序及注釋見(jiàn)附錄添加程序到ISE軟件,雙擊“GenerateProgrammingFile”或右鍵后點(diǎn)擊reRunAll運(yùn)行程序,直到出現(xiàn)三個(gè)綠色的勾表示程序編譯正確,如圖5-2所示:圖5-2編譯圖將生成的bit格式文件用“Adept”軟件下載到開(kāi)發(fā)板,如圖5-3所示:圖5-3下載程序六.結(jié)果被除數(shù)顯示(當(dāng)SW1-SW0為00時(shí)):除數(shù)顯示(當(dāng)SW1-SW0為01時(shí)):商顯示(當(dāng)SW1-SW0為10時(shí)):余數(shù)顯示(當(dāng)SW1-SW0為11時(shí)):七.設(shè)計(jì)心得從最開(kāi)始的毫無(wú)頭緒,無(wú)從下手,到最后在開(kāi)發(fā)板上正常運(yùn)行,雖然其中可能有不完美,我還是體會(huì)到了成功的喜悅。通過(guò)這次課設(shè)的鍛煉使我受益匪淺。在設(shè)計(jì)的過(guò)程中遇到的問(wèn)題,可以說(shuō)是困難重重,這畢竟第一次做,難免會(huì)遇到過(guò)各種各樣的問(wèn)題,同時(shí)在設(shè)計(jì)的過(guò)程中發(fā)現(xiàn)了自己的不足之處,對(duì)以前所學(xué)過(guò)的知識(shí)理解得不夠深刻,掌握得不夠牢固。不過(guò)在所遇的問(wèn)題處理過(guò)程中有成功也有失敗,但這卻實(shí)加強(qiáng)了自己的動(dòng)手能力,最終我還是體會(huì)到了成功的喜悅。在實(shí)驗(yàn)完成的時(shí)候我的心情真是無(wú)比的開(kāi)心,從最初的一無(wú)所知到最后一直堅(jiān)持著實(shí)驗(yàn)的做完,感覺(jué)自己像是完成了一項(xiàng)偉大的任務(wù),內(nèi)心無(wú)比的激動(dòng)與自豪。同時(shí),在此過(guò)程中我也遇到了不少問(wèn)題,同學(xué)們也都熱情的給與了幫助,這也讓我感覺(jué)到了團(tuán)隊(duì)的智慧終究不是單個(gè)人所能比擬的??偠灾@次實(shí)驗(yàn),讓我收獲頗豐。參考文獻(xiàn)[1](美)帕爾尼卡(SamirPalnitkar)著夏宇聞,胡燕祥,刁嵐松等譯.VerilogHDL數(shù)字設(shè)計(jì)與綜合:aguidetodigitaldesignandsynthesis(第二版)[M].北京:電子工業(yè)出版社,2009[2]安然.基于FPGA的除法器的設(shè)計(jì)和實(shí)現(xiàn)[D].成都理工大學(xué),2011.
八.程序附錄#InputsNET"clk"LOC="B8";//時(shí)鐘接芯片B8管腳#NET"clk"CLOCK_DEDICATED_ROUTE=FALSE;NET"reset"LOC="N3";#SW7//SW7為復(fù)位鍵NET"en"LOC="E2";#SW6//使能開(kāi)關(guān)SW6連芯片上E2管腳NET"sw1"LOC="L3";#SW1//SW1連芯片的L3管腳NET"sw0"LOC="P11";#SW0//SW0連芯片的P11管腳NET"btn3"LOC="A7";#BTN3//BTN3連芯片上的A7管腳NET"btn2"LOC="M4";#BTN2//BTN2連芯片上的M4管腳NET"btn1"LOC="C11";#BTN1//BTN1連芯片上的C11管腳NET"btn0"LOC="G12";#BTN0//BTN0連芯片上的G12管腳#OutputsNET"an0"LOC="F12";//an0連芯片上的F12NET"an1"LOC="J12";//an1連芯片上的J12NET"an2"LOC="M13";//an2連芯片上的M13NET"an3"LOC="K14";//an3連芯片上的K14NET"dp"LOC="N13";//dp連芯片上的N13NET"cg"LOC="M12";//cg連芯片上的M12NET"cf"LOC="L13";//cf連芯片上的L13NET"ce"LOC="P12";//ce連芯片上的P12NET"cd"LOC="N11";//cd連芯片上的N11NET"cc"LOC="N14";//cc連芯片上的N14NET"cb"LOC="H12";//cb連芯片上的H12NET"ca"LOC="L14";//ca連芯片上的L14modulechufaqi(reset,clk,sw1,sw0,btn3,btn2,btn1,btn0,en,an0,an1,an2,an3,dp,cg,cf,ce,cd,cc,cb,ca); inputreset,clk,sw1,sw0,btn3,btn2,btn1,btn0; outputan0,an1,an2,an3,dp,cg,cf,ce,cd,cc,cb,ca; inputen;//定義輸入輸出管腳reg[3:0]disp_data0,disp_data1,disp_data2,disp_data3; wire[15:0]dividend;//被除數(shù) wire[7:0]divisor;//除數(shù) wire[15:0]res;//商 wire[7:0]rm;//余數(shù)regdividend_key0,dividend_key1,dividend_key2,dividend_key3;regdivisor_key0,divisor_key1;always@(*)//所有變量都選,只要有一個(gè)為高電平就滿足begin if({sw1,sw0}==2'b00)//被除數(shù)輸入 begin dividend_key0=btn0; dividend_key1=btn1; dividend_key2=btn2; dividend_key3=btn3; end else//否則就保持 begin dividend_key0=1'b0; dividend_key1=1'b0; dividend_key2=1'b0; dividend_key3=1'b0; endendalways@(*)begin if({sw1,sw0}==2'b01)//除數(shù)輸入 begin divisor_key0=btn0; divisor_key1=btn1; end else//否則就保持 begin divisor_key0=1'b0; divisor_key1=1'b0; endendalways@(*)//數(shù)碼管顯示begin case({sw1,sw0})//被除數(shù)顯示 2'b00: begin disp_data0=dividend[3:0]; disp_data1=dividend[7:4]; disp_data2=dividend[11:8]; disp_data3=dividend[15:12]; end 2'b01://除數(shù)顯示 begin disp_data0=divisor[3:0]; disp_data1=divisor[7:4]; disp_data2=4'b0000; disp_data3=4'b0000; end 2'b10://商顯示 begin disp_data0=res[3:0]; disp_data1=res[7:4]; disp_data2=res[11:8]; disp_data3=res[15:12]; end 2'b11://余數(shù)顯示 begin disp_data0=rm[3:0]; disp_data1=rm[7:4]; disp_data2=4'b0000; disp_data3=4'b0000; end endcaseend//實(shí)例引用divisionu1(.reset(reset),.en(en),.clk(clk),.num(dividend),.den(divisor),.res(res),.rm(rm));shumaguanu2(.clk(clk),.reset(reset),.datain0(disp_data0),.datain1(disp_data1), .datain2(disp_data2),.datain3(disp_data3), .an0(an0),.an1(an1),.an2(an2),.an3(an3), .dp(dp),.cg(cg),.cf(cf),.ce(ce),.cd(cd),.cc(cc),.cb(cb),.ca(ca));key_countu3(.reset(reset),.clk(clk),.key(dividend_key0),.q(dividend[3:0]));key_countu4(.reset(reset),.clk(clk),.key(dividend_key1),.q(dividend[7:4]));key_countu5(.reset(reset),.clk(clk),.key(dividend_key2),.q(dividend[11:8]));key_countu6(.reset(reset),.clk(clk),.key(dividend_key3),.q(dividend[15:12]));key_countu7(.reset(reset),.clk(clk),.key(divisor_key0),.q(divisor[3:0]));key_countu8(.reset(reset),.clk(clk),.key(divisor_key1),.q(divisor[7:4]));endmodulemoduledivision(reset,en,clk,num,den,res,rm);inputreset,en,clk;input[15:0]num;//輸入被除數(shù)input[7:0]den;//輸入除數(shù)output[15:0]res;//輸出商output[7:0]rm;//輸出余數(shù)reg[15:0]res;//把商值輸入寄存器reg[7:0]rm;//把余數(shù)值輸入寄存器(*keep="true"*)reg[8:0]dbuf=9'b0;//把dbuf立即數(shù)送入b0中reg[23:0]tbuf=24'b0;//把dbuf立即數(shù)送入b0中reg[4:0]state;always@(posedgeresetorposedgeclk)beginif(reset)//復(fù)位清零beginres<=8'b0000_0000;//商清零rm<=8'b0000_0000;//余數(shù)清零state<=5'b00000;//狀態(tài)數(shù)清零endelsebeginif(en)begincase(state)0:begintbuf[23:16]<=8'b0000_0000;//發(fā)射機(jī)緩沖寄存器清零tbuf[15:0]<=num;dbuf<={1'b0,den};res<=tbuf[15:0]; //24位數(shù)后16位為商rm<=tbuf[23:16];//前8位為余數(shù)state<=state+1'b1;enddefault:beginif(tbuf[23:15]>=dbuf)//前9位比較begintbuf[23:16]<=tbuf[22:15]-dbuf[7:0];//2到9位相減tbuf[15:0]<={tbuf[14:0],1'b1};//后15位保留,并最后添1endelsetbuf<={tbuf[22:0],1'b0};//小于則去第一位,最后位添0if(state!=5'b10000)//算到第16次結(jié)束state<=state+1'b1;elsestate<=5'b00000;endendcaseendendendendmodulemodulekey_count(reset,clk,key,q);inputreset,clk,key;output[3:0]q;reg[3:0]q;regkey_last;regrise_get;always@(posedgeresetorposedgeclk)//所有變量都選,只要有一個(gè)為高電平就滿足beginif(reset)key_last<=1'b0;//清零elsekey_last<=key;//保持endalways@(posedgeresetorposedgeclk)//所有變量都選,只要有一個(gè)為高電平就滿足beginif(reset)rise_get<=1'b0;elseif((!key_last)&&key)rise_get<=1'b1;elserise_get<=1'b0;endalways@(posedgeresetorposedgeclk)beginif(reset)q<=4'b0000;elseif(rise_get)q<=q+1'b1;//按一次則加1endendmodulemoduleshumaguan(clk,reset,datain0,datain1,datain2,datain3,an0,an1,an2,an3,dp,cg,cf,ce,cd,cc,cb,ca);inputclk,reset;input[3:0]datain0,datain1,datain2,datain3;outputan0,an1,an2,an3;outputdp,cg,cf,ce,cd,cc,cb,ca;regan0,an1,an2,an3;regcg,cf,ce,cd,cc,cb,ca;wiredp;regdiv1000,div100;reg[9:0]div1000_count;reg[6:0]div100_count;reg[1:0]state;reg[3:0]data;always@(posedgeclkorposedgereset)beginif(reset)//當(dāng)reset信號(hào)為1時(shí)begin div1000_count<=10'd0;//1000次計(jì)數(shù)位清0 div1000<=1'b0;//1000次計(jì)數(shù)標(biāo)志位為0 endelseif(div1000_count==10'd999)//當(dāng)計(jì)數(shù)到999時(shí)begindiv1000_count<=10'd0;//1000次計(jì)數(shù)位清零 div1000<=1'b1;//1000次計(jì)數(shù)標(biāo)志為1end else begindiv1000_count<=div1000_count+1'b1;div1000<=1'b0; end//在未計(jì)數(shù)到999次時(shí)計(jì)數(shù)繼續(xù),1000次計(jì)數(shù)標(biāo)志為0endalways@(posedgeclkorposedgereset)beginif(reset)//當(dāng)reset信號(hào)為1時(shí)begindiv100_count<=7'b000_0000;//計(jì)數(shù)位清0div100<=1'b0;//100次計(jì)數(shù)標(biāo)志為0 endelsebegin if(div1000)//當(dāng)1000次計(jì)數(shù)標(biāo)志為1時(shí) begin if(div100_count==7'd99)//當(dāng)計(jì)數(shù)到99時(shí) begin div100_count<=7'b000_0000;//計(jì)數(shù)清0 //div100<=1'b1; end else//當(dāng)未計(jì)數(shù)到99時(shí) begin div100_count<=div100_count+1'b1;//計(jì)數(shù)繼續(xù) //div100<=1'b0; end end if((div1000)&&(div100_count==7'd99))//當(dāng)1000次計(jì)數(shù)標(biāo)志為1且100次計(jì)數(shù)位計(jì)到99時(shí) div100<=1'b1;//100次計(jì)數(shù)標(biāo)志位為1 else div100<=1'b0;//否則100次計(jì)數(shù)標(biāo)志位為0 endend//以上模塊實(shí)現(xiàn)了分頻的效果always@(posedgeclkorposedgereset)beginif(reset)//當(dāng)reset信號(hào)為1時(shí)begin state<=2'b00;//當(dāng)state為00時(shí) data<=4'b0000;//data為0000 {an3,an2,an1,an0}<=4'b1111;//an3,an2,an1,an0分別為1,即四個(gè)數(shù)碼管全關(guān) end else begin case(state) 2'b00://當(dāng)state=00時(shí) begin data<=datain0; {an3,an2,an1,an0}<=4'b1110;//選通an0對(duì)應(yīng)的數(shù)碼管 end 2'b01://當(dāng)stata=01時(shí) begin data<=datain1; {an3,an2,an1,an0}<=4'b1101;//選通an1對(duì)應(yīng)的數(shù)碼管 end 2'b10://當(dāng)stata=10時(shí) begin data<=datain2; {an3,an2,an1,an0}<=4'b1011;//選通an2對(duì)應(yīng)的數(shù)碼管 end 2'b11://當(dāng)stata=11時(shí) begin data<=datain3; {an3,an2,an1,an0}<=4'b0111;//選通an3對(duì)應(yīng)的數(shù)碼管 end endcase if(div100)//當(dāng)100次計(jì)數(shù)標(biāo)志為1時(shí) begin state<=state+1'b1;//對(duì)state加1,由于state為兩位二進(jìn)制數(shù),只可能是00,01,10,11四種狀態(tài) endend endalways@(data)begincase(data) 4'b0000:{cg,cf,ce,cd,cc,cb,ca}<=7'b1000000;//數(shù)碼管顯示0 4'b0001:{cg,cf,ce,cd,cc,cb,ca}<=7'b1111001;//數(shù)碼管顯示1 4'b0010:{cg,cf,ce,cd,cc,cb,ca}<=7'b0100100;//數(shù)碼管顯示2 4'b0011:{cg,cf,ce,cd,cc,cb,ca}<=7'b0110000;//數(shù)碼管顯示3 4'b0100:{cg,cf,ce,cd,cc,cb,ca}<=7'b0011001;//數(shù)碼管顯示4 4'b0101:{cg,cf,ce,cd,cc,cb,ca}<=7'b0010010;//數(shù)碼管顯示5 4'b0110:{cg,cf,ce,cd,cc,cb,ca}<=7'b0000010;//數(shù)碼管顯示6 4'b0111:{cg,cf,ce,cd,cc,cb,ca}<=7'b1111000;//數(shù)碼管顯示7 4'b1000:{cg,cf,ce,cd,cc,cb,ca}<=7'b0000000;//數(shù)碼管顯示8 4'b1001:{cg,cf,ce,cd,cc,cb,ca}<=7'b0010000;//數(shù)碼管顯示9 4'b1010:{cg,cf,ce,cd,cc,cb,ca}<=7'b0001000;//數(shù)碼管顯示a 4'b1011:{cg,cf,ce,cd,cc,cb,ca}<=7'b0000011;//數(shù)碼管顯示b 4'b1100:{cg,cf,ce,cd,cc,cb,ca}<=7'b1000110;//數(shù)碼管顯示c 4'b1101:{cg,cf,ce,cd,cc,cb,ca}<=7'b0100001;//數(shù)碼管顯示d 4'b1110:{cg,cf,ce,cd,cc,cb,ca}<=7'b0000110;//數(shù)碼管顯示e 4'b1111:{cg,cf,ce,cd,cc,cb,ca}<=7'b0001110;//數(shù)碼管顯示f endcaseendassigndp=1'b1;//數(shù)碼管小數(shù)點(diǎn)選擇關(guān)斷endmodule目錄TOC\o"1-2"\h\u第一章概論 11.1項(xiàng)目名稱 11.2項(xiàng)目地點(diǎn) 11.3區(qū)域特點(diǎn) 11.4建設(shè)規(guī)模 11.5可行性研究范圍 21.6項(xiàng)目估算總投資額 3第二章項(xiàng)目市場(chǎng)分析 32.1####縣經(jīng)濟(jì)發(fā)展趨勢(shì)分析 32.2####縣房地產(chǎn)發(fā)展概況 42.3區(qū)域市場(chǎng)分析 102.4項(xiàng)目利弊分析 11第三章項(xiàng)目定位及銷(xiāo)售預(yù)測(cè) 123.1項(xiàng)目定位 12
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度報(bào)關(guān)服務(wù)開(kāi)具增值稅發(fā)票及倉(cāng)儲(chǔ)管理協(xié)議
- 2024年度甘肅省國(guó)家保安員資格考試題庫(kù)綜合試卷B卷附答案
- 裝修延誤合同
- 教育培訓(xùn)貸款居間服務(wù)合同
- 酒店客房裝飾改造協(xié)議
- 食品加工用水運(yùn)輸合同
- 中藥香囊定制服務(wù)企業(yè)制定與實(shí)施新質(zhì)生產(chǎn)力戰(zhàn)略研究報(bào)告
- 2025安徽省安全員A證考試題庫(kù)及答案
- 2025四川省建筑安全員A證考試題庫(kù)
- 2025陜西省安全員考試題庫(kù)及答案
- HXD3、HXD3CA型電力機(jī)車(chē)應(yīng)急故障處理
- 新浪輿情通建設(shè)方案
- 護(hù)理四種注射法課件
- 物流營(yíng)銷(xiāo)(第四版) 課件 第六章 物流營(yíng)銷(xiāo)策略制定
- 小學(xué)數(shù)學(xué)解決問(wèn)題題型及解題思路歸類(lèi)匯總
- 壯醫(yī)滾蛋治療護(hù)理技術(shù)操作規(guī)范
- 人教版(2023) 選擇性必修第三冊(cè) Unit 1 Art Using Language教案
- 現(xiàn)代控制原理-劉豹
- 電力安全生產(chǎn)“十項(xiàng)嚴(yán)禁”【系列漫畫(huà)】
- 升壓站設(shè)備安裝調(diào)試工程施工質(zhì)量驗(yàn)收及評(píng)定范圍劃分表
- 影視欣賞:士兵突擊課件
評(píng)論
0/150
提交評(píng)論