FPGA個人學習總結1_第1頁
FPGA個人學習總結1_第2頁
FPGA個人學習總結1_第3頁
FPGA個人學習總結1_第4頁
FPGA個人學習總結1_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

綜合方面經(jīng)綜合后:普通的數(shù)據(jù)單端輸入都會加一個IBUF緩沖器;數(shù)據(jù)單端輸出有個OBUF緩存器;時鐘輸入口會加BUFGP緩沖器;對于4選1的mux,if結構和case結構都只需要一個slice,由MUXF5控制兩個LUT下圖為8選一case結構,MUXF6控制兩個MUXF5,以兩個slices實現(xiàn)8選1,用if結構實現(xiàn)的結構也是一樣的注意一點:使用ViewTechnologySchematic,來查看最底層的實現(xiàn)形式,即FPGA中的LUT、MUXF5等使用但有的綜合后RTLSchematic相同,TechnoligySchematic不同,而有的又相反(如onebit相加,加括號前后例子),那么我們應該以哪種為最優(yōu)呢?如下圖:圖上下分別為加括號前和加括號后RTL:只有根據(jù)實際需要來選擇,如信號的先后順序等等2.LUT的名字后_數(shù)字,那個數(shù)字代表什么意思?LUTa_b:a代表所有輸入數(shù)據(jù)位寬,即輸入數(shù)據(jù)的個數(shù),切勿將位寬理解為“每個輸入端口的數(shù)據(jù)寬度(因每個輸入端口是單bit輸入);b代表LUT被初始化的狀態(tài)3.比較器位寬大小對綜合結構的影響當比較的位寬高于一定位數(shù)時,綜合會采用進位鏈結構,如下圖:4.在調用DCM核時,CLKFX_OUT為輸出引腳,并且LOCKED_OUT必須勾上,否則波形無法輸出,具體步驟參考本文件夾下“dcm核設置”5.如何判斷PCB板上的復位芯片是低復位還是高復位?將復位芯片的輸出連接至LED等,若正常工作后是亮(前提是LED另一端是接地),表示正常工作是高,說明之前是低,即為低復位,不亮則為高復位6.兩種不同下載接口的比較<具體還可參考項23>eq\o\ac(○,1)每個FPGA都有兩組下載接口JTAG和SPI;eq\o\ac(○,2)JTAG中TMS為模式選擇,TCK為時鐘,TDI和TDO分別為輸入輸出數(shù)據(jù);eq\o\ac(○,3)SPI中SS(有的為STB)為片選信號,SCK為時鐘信號,另外兩根為數(shù)據(jù)信號;eq\o\ac(○,4)通過JTAG下載程序到FPGA:編程管腳跳針要拔掉,掉電后程序也會丟失,即下次上電工作后需要重新下載程序eq\o\ac(○,5)通過SPI下載程序到FPGA:先將編程引腳PROG接地,SPI接口斷開與FPGA通信,而與flash通信,程序下載到外掛FLASH中,然后將PROG跳針拔掉,F(xiàn)LASH中程序下載到FPGA中eq\o\ac(○,6)外部Flash不單是一個裸存儲器,它還有SPI接口,圖中的SPI接口就是從FLASH的SPI接口中引出來的引腳eq\o\ac(○,7)SPI接口是串行同步通信,串口UART是串行異步通信7.關于示波器當配置芯片相應寄存器后,觀察輸出的波形頻率時,若出現(xiàn)頻率跳動,可以檢查示波器上的采樣電平是否在波形的中間位置8.關于復位信號與寄存器聲明寄存器在聲明時最好給個初始值,即加載時的值,例如:reg[1:0]a=2’b00或直接寫0;復位信號不要列在敏感列表中,直接使用if(rst),使rst成為控制信號9.如何看出接口讀取數(shù)據(jù)所用的時鐘沿上圖可以看出,時鐘的下降沿對準數(shù)據(jù)中心,說明該芯片的此接口是用時鐘的下降沿來讀取數(shù)據(jù)的上圖可以看出,時鐘的上升沿對準數(shù)據(jù)中心,說明該芯片的此接口是用時鐘的上升沿來讀取數(shù)據(jù)的故:如果芯片AB之間有走線延遲的話,那么我們在芯片A要用相反的時鐘沿送出數(shù)據(jù),經(jīng)過走線延遲后,芯片B對應接口讀取數(shù)據(jù)的時鐘沿正好對準到達芯片B的數(shù)據(jù)的保持時間,即使最大延遲半個周期,也正好對準數(shù)據(jù)的中心10.FPGA內部寄存器都是高復位,綜合時綜合工具會自動為復位信號反相,若外部芯片為低復位,則可在FPGA設計時,先將復位信號反相,然后使用if(rst)11.當控制信號高于slice的供應時,可將控制信號轉化為數(shù)據(jù)信號,例如:If(a)q<=b;轉換為q<=(a&b)|(!a&q);elseq<=q;12.毛刺問題概念:由于延遲的作用,多個信號到達終點的時間有先有后,形成了競爭,由競爭產(chǎn)生的錯誤輸出就是毛刺產(chǎn)生條件:在同一時刻有多個信號輸入發(fā)生改變出現(xiàn)時間:由于冒險多出現(xiàn)在信號發(fā)生電平跳變的時刻,即在輸出信號的建立時間內會產(chǎn)生毛刺,而在保持時間內不會出現(xiàn),13.調用ram

在建立RAM的IP核時,關于是否選擇輸出寄存器,根據(jù)需要!選擇一個寄存器,數(shù)據(jù)則在采到地址后,延遲一個時鐘周期,才會輸出14.綜合后的寄存器fd為普通的寄存器;fdr為帶復位端的寄存器;fdre為帶復位端和使能端得寄存器15.寄存器地址注重參數(shù)化設計可以先用define定義相關寄存器的地址參數(shù),然后在運用中使用該參數(shù),如下:`definereset_addr 4'b1101;always@(posedgeCLK32MornegedgeRST) begin if(!RST) begin SPI_EN<=8'b0010_0000; CTL[7:1]<=7'b1111_101; RESET<=8'b1101_0000; end elseif(wr_reg==2'b01) case(ADDR) `spi_en_addr : SPI_EN[7:0]<=DATA[7:0]; `reset_addr : RESET[7:0]<=DATA[7:0];………. 則地址寄存器名R/W默認值說明4’b1101RESETR/W8’b1101_0000復位寄存器當給寄存器的賦值是某一固定值時,為只讀寄存器16.綜合問題將一輸入端口賦值給一個寄存器,再將該寄存器賦值給一個wire型輸出端口,則在綜合后,輸入不會賦值給輸出,注意上面的輸入輸出指的是整個工程的輸入輸出解決辦法:給輸入添加一個ibuf,或者給輸出添加一個obuf有時不必延遲一個時鐘周期,而直接將輸入賦值給輸出17.時序約束問題eq\o\ac(○,1)寄存器到寄存器:過周期約束來設置,一般為實際時鐘頻率的110%;eq\o\ac(○,2)輸入管腳到寄存器:通過offsetin來設置,一般為半個時鐘周期;由于上游芯片的數(shù)據(jù)輸出和該FPGA的數(shù)據(jù)輸入使用的是同一個時鐘,故如果上游芯片的數(shù)據(jù)輸出采用下降沿,那么FPGA的offsetin就需采用上升沿;上游芯片的輸出到FPGA寄存器之間的延遲可能不到半個周期;eq\o\ac(○,3)寄存器到輸出管腳:參考eq\o\ac(○,2)18.系統(tǒng)同步接口和源同步接口的區(qū)別eq\o\ac(○,1)系統(tǒng)同步接口:上游芯片發(fā)送數(shù)據(jù)的時鐘和FPGA接收數(shù)據(jù)的時鐘均為系統(tǒng)時鐘,或者FPGA發(fā)送數(shù)據(jù)的時鐘和下游芯片接收數(shù)據(jù)的時鐘均為系統(tǒng)時鐘;eq\o\ac(○,2)源同步接口:上游芯片發(fā)送數(shù)據(jù)給FPGA的同時,也發(fā)送接收時鐘給FPGA,或者FPGA發(fā)送數(shù)據(jù)給下游芯片的同時,也發(fā)送接收時鐘給下游芯片。19.在為寄存器分配地址時,常表示為0x…,這樣也表示是十六進制!20.FPGA設計面積與速度面積指設計所占用的FPGA邏輯資源數(shù)目,即觸發(fā)器FF和查找表LUT的數(shù)目速度指芯片穩(wěn)定運行時所能達到的最高頻率實際運用中,存在二者之間的平衡操作有:模塊復用、乒乓操作、串并轉換以及流水線操作,其中流水線操作比較重要。21.同步電路與異步電路區(qū)別在于電路觸發(fā)是否與驅動時鐘同步,從行為上將就是所有電路是否在同一時鐘沿的觸發(fā)下處理數(shù)據(jù)。以復位電路為例,如果在敏感表中使用negedgerst,則為異步電路設計原則:eq\o\ac(○,1)在多時鐘設計中,使設計做到局部同步,即同一時鐘驅動的電路要同步于其同一時鐘沿(要么均采用上升沿,要么均采用下降沿),即盡量使用單時鐘和單時鐘沿。eq\o\ac(○,2)避免使用門控時鐘。門控時鐘是指產(chǎn)生時鐘使用了組合邏輯。門控時鐘相關的邏輯不是同步電路,可能帶有毛刺。雖可減小功耗,但隨著低功耗FPGA的發(fā)展,應盡可能避免使用門控時鐘。eq\o\ac(○,3)禁止在模塊內部使用計數(shù)器分頻來產(chǎn)生所需的時鐘,這樣會使時序分析變得復雜,產(chǎn)生較大的時鐘漂移,浪費時序裕量,降低設計可靠性,不過對于低速系統(tǒng)采用一兩個是沒太大問題,可以設計成時鐘使能電路,參考本目錄下其他資料。同步電路優(yōu)點:eq\o\ac(○,1)有效避免毛刺,提高設計可靠性;eq\o\ac(○,2)簡化時序分析過程;eq\o\ac(○,3)減少工作環(huán)境對設計的影響,異步電路受工作溫度、電壓等影響,器件延時變化較大,異步電路時序變得更加苛刻,導致芯片無法正常工作,而同步電路只要求時鐘和數(shù)據(jù)沿相對穩(wěn)定,時序要求相對寬松。22.單片機與ARM二者都可通過Intel總線或者SPI或者串口與外部芯片通信,并且通過CS信號來選擇要通信的芯片,故允許一定數(shù)量的芯片掛在Intel總線上23.FPGA配置過程及配置方式配置過程:eq\o\ac(○,1)上電后,F(xiàn)PGA若滿足相關條件便會自動進行初始化,初始化完成后DNOE信號將變低,并且以后都會是低電平;eq\o\ac(○,2)初始化完成后,F(xiàn)PGA會將INIT信號置低,開始清空配置寄存器,清空完后將INIT信號置高;用戶可將PROG或者INIT信號置低,來延長清空寄存器時間(注:INIT信號為雙向端口);eq\o\ac(○,3)清空寄存器后,F(xiàn)PGA對配置模式管腳M[2:0]采樣,確定數(shù)據(jù)配置模式;<001>為SPI模式,<000>為JTAG模式;eq\o\ac(○,4)若需重新配置,只需將PROG置低即可,這里不要使用INIT。配置模式:eq\o\ac(○,1)根據(jù)芯片能否自動加載配置數(shù)據(jù),分為主模式、從模式和JTAG模式;eq\o\ac(○,2)主模式,能自動將配置數(shù)據(jù)從相應外存儲器讀入到SRAM中,實現(xiàn)內部結構映射,如我們比較常用SPI模式<FPGA是基于SRAM工藝的>;eq\o\ac(○,3)JTAG模式,數(shù)據(jù)直接從TDI進入FPGA,完成相應的配置,該模式用來對芯片進行測試。<jointtestactiongroup>24.關于雙向端口的綜合結果分析例如:input[15:0]data_in,input[3:0]work_state, input[1:0]cnt_cl, inout[15:0]sdram_data, output[15:0]data_out,assignsdram_data=(work_state==W_WR)?data_in:16'bz;----------------------------eq\o\ac(○,1)assigndata_out=(cnt_cl==2'd2)?sdram_data:16'bz;------------------------------------eq\o\ac(○,2)綜合后如下:語句eq\o\ac(○,1)綜合成下面的BUFT;當T2=0時,sdram_data輸出data_in,當T2=1時,BUFT輸出高阻。需要注意兩點:eq\o\ac(○,1)T1和T2要存在制約關系;eq\o\ac(○,2)不要去追究太多,程序中的式eq\o\ac(○,1)就綜合成下面的BUFT,式eq\o\ac(○,2)就綜合成上面的BUFT,另外,由于data_out不是雙向端口,故可將eq\o\ac(○,2)式改成:assigndata_out=(cnt_cl==2'd2)?sdram_data:16'b0;這樣上面BUFT就會用與門代替(本項目中綜合后是這樣的)eq\o\ac(○,3)上面的BUFT就等價于下面的電路:在功能仿真時,雙向端口上如果沒有數(shù)據(jù),則輸出高阻態(tài)25.關于設計中給寄存器賦初值的分析賦初值后,在程序加載時,會自動為寄存器賦值,避免了在程序初始時刻出現(xiàn)“X”狀態(tài)26.SPI系統(tǒng)設計,如下圖所示eq\o\ac(○,1)從SPI接口出來的數(shù)據(jù)地址總線以及讀寫命令進入各寄存器模塊管理,注意數(shù)據(jù)收發(fā)總線是獨立的兩組總線;eq\o\ac(○,2)數(shù)據(jù)線數(shù)據(jù)讀寫,通過地址線高位來控制,個人認為,用高位地址來產(chǎn)生片選,用片選去控制輸出端,未被片選時輸出高阻態(tài),同時使用片選控讀寫信號,未被片選時,不進行讀寫操作;eq\o\ac(○,3)功能接口只負責數(shù)據(jù)處理,然后數(shù)據(jù)送到相關寄存器模塊,供外部訪問;eq\o\ac(○,4)對于被選中的寄存器管理模塊,在寫命令下,將從SPI送來的數(shù)據(jù)寫入到功能接口發(fā)送寄存器,將數(shù)據(jù)從功能接口發(fā)送出去,或者也可寫入其他相應的寄存器,由寄存器地址決定;在讀命令下,將功能接口接收的數(shù)據(jù)寫入SPI發(fā)送寄存器,從而發(fā)送到SPI總線上,注意地址要對應。27.上電加載管腳PROG_B端的電容的容值要合適,在XC3S250E中為10UF,這樣才能正確下載程序!28.在FPGA上板調試過程中,如果相關信號不正確,考慮方向?查看PCB板上的時鐘芯片的時鐘頻率是否準確;29.在問題26中,遇見如下問題:例如:在接口1reg管理模塊中,有個寄存器既輸出給SPI接口端數(shù)據(jù)總線,也輸出給功能接口1,在功能接口1中,對輸入的數(shù)據(jù)進行了如下操作4'b0110:SERD<=datain[7]; 4'b0111:SERD<=datain[6]; 4'b1000:SERD<=datain[5]; 4'b1001:SERD<=datain[4]; 4'b1010:SERD<=datain[3]; 4'b1011:SERD<=datain[2]; 4'b1100:SERD<=datain[1]; 4'b1101:SERD<=datain[0];結果導致從SPI接口讀出的數(shù)據(jù)與寫入的不一致解決辦法:將進入功能接口1的數(shù)據(jù),先緩存,再使用,如下reg[7:0]datai_delay;always@(posedgeCK4MornegedgeRST)if(!RST) datai_delay<=8'b0;elseif(fame_len==4'b0000) datai_delay<=datain; else datai_delay<=datai_delay;再將第一段程序datain換成datai_delay所以,以后如果多個模塊共用一個寄存器的數(shù)據(jù),出現(xiàn)錯誤的話,不妨在某些模塊中,將該寄存器數(shù)據(jù)延遲。30.在頂層模塊中,輸出端口由多個模塊的輸出端口驅動時,綜合時報錯怎么辦?解決辦法:在各個模塊使用使能信號將各個驅動信號變成三態(tài)使能門31.FPGA調試方法對于在一段時間內,只在一個時鐘發(fā)生變化的信號,可用點燈來測試該信號的正確性

測試程序是:當該信號來時,測試燈狀態(tài)改變,其他時刻保持不變

同理:對于不循環(huán)的計數(shù)器的特定也可以這樣來測試程序參考:regrun_r=1'b1;assignrun=run_r;always@(posedgeCLK32M)if(!rst) run_r<=1'b1; elseif(cs_send_ram) run_r<=1'b0; else run_r<=run_r;

對于整個程序,從時序的后端往前端,逐步測試,逐步判斷出錯的地方32.關于總線驅動在CPLD中,用assign語句直接對信號進行驅動,不需要時鐘;同樣在FPGA中對信號進行驅動,也采用一樣的方法,不要用時鐘去采樣,直接用assign33.關于時鐘選取的問題有兩個時鐘A和B,若要將它們合并成一個時鐘C,從而在設計中使用C時鐘沿方法是:assignC=A&B,而不要弄成A|B34.數(shù)據(jù)選擇問題:使用x條件判斷來從a和b中選擇一個賦值給c錯誤語言:Wire[7:0]a,b,c;Wirex;Assignc=(!x&a)||(x&b);錯誤原因:x是一位,a是8位,如何相與?正確寫法:Assignc=x?a:b注意:這里的括號并不對多位數(shù)據(jù)進行邏輯判斷(已經(jīng)綜合驗證),只有在if等判斷語句中才對括號進行邏輯判斷35.FPGA錯誤排除方法當?shù)玫降男盘柌徽_時,檢查該信號在頂層端口是否對應,位寬是否正確36.FPGA選型對于中低速信號,選擇FPGA主要考慮兩個方面:容量和管腳,其次還有價格和速度容量:看FPGA內部的RAM的大小是否夠存數(shù)據(jù)幀,以及RAM的數(shù)目是否夠用管腳:數(shù)目是否夠用對于高速信號,才考慮速度37.BlockRAM和DistributedRAM有什么區(qū)別?eq\o\ac(○,1)較大的存儲應用,建議用bram;零星的小ram,一般就用dram。但這只是個一般原則,具體的使用得看整個設計中資源的冗余度和性能要求

eq\o\ac(○,2)dram可以是純組合邏輯,即給出地址馬上出數(shù)據(jù),也可以加上register變成有時鐘的ram。而bram一定是有時鐘的。

eq\o\ac(○,3)如果要產(chǎn)生大的FIFO或timing要求較高,就用BlockRAM。否則,就可以用DistributedRAM。在XilinxAsynchronousFIFOCORE的使用時,有兩種RAM可供選擇,Blockmemory和Distributedmemory。差別在于,前者是使用FPGA中的整塊雙口RAM資源,而后者則是拼湊起FPGA中的查找表形成。

38.FIFO核生成時,如下界面:第一列是選擇讀寫時鐘是共用的還是獨立的,第二列選擇實現(xiàn)FIFO時是使用塊RAM還是使用分布式RAM

第一列根據(jù)自己需要選擇,第二列根據(jù)FIFO大小及時序來選擇,如37題所述。

注:各項選擇用同一個按鈕來選擇,而非分開選擇39.板上調試時,有時用示波器測量信號,出現(xiàn)問題是:無論量哪個管腳,都出來的是50HZ正弦波。問題出在:探針的接地斷了40.調試FPGA,信號不輸出當仿真時,某信號不輸出或者輸出為高阻時,檢查方向:該模塊內的信號是否與該模塊內被調用模塊的信號相對應,包括被調用的IP核例如A模塊內有信號a,A模塊內調用了模塊B,模塊B中的信號b與頂層模塊A中的信號a相對應,則在A中,調用要正確,即對應為.b(a)41.FIFO使用總結如果使用IP核的RST端口,請注意RST是高復位42.MCU數(shù)據(jù)雙向端口處理對于雙向端口,要通過片選處理成兩個獨立的輸入端口和輸出端口,從而方便掛多個器件。方法如處理SDRAM雙向數(shù)據(jù)端口一樣。43.MCU讀寫時序分析圖一圖二

由上圖時序分析可知:單片機在ALE下降沿對準地址中心處,故FPGA用ALE下降沿去采樣地址;單片機在讀信號上升沿讀取數(shù)據(jù),故FPGA要在讀信號下降沿給出數(shù)據(jù);單片機在寫信號下降沿送出數(shù)據(jù),故FPGA在寫信號上升沿讀取數(shù)據(jù)。44.FPGA模塊調用問題——可參考項目OPU4中528K(V35網(wǎng)管信息)的FPGA設計舉例:工程中有相同的4組功能端口,它們實現(xiàn)相同的功能。在實現(xiàn)一組功能端口的功能后,不需要將該組模塊復制3遍,只需要將該組模塊在頂層模塊例化三遍,改變例化端口名即可。

如下,P是同一個功能接口,x和y是整個工程的輸入輸出端口,由于有四組端口,故在例化時要給不同的變量名,而四組端口調用同一模塊,故a和b不變。綜合時,例化了多少次,rtl級電路中便有多少個該電路模塊,ip核同樣例化調用。inputx1,x2,x3,x4;outputy1,y2,y3,y4;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論