版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、abstract2 電子科技大學(xué)成都學(xué)院university of electronic science and technology chengdu university 本科畢業(yè)設(shè)計(jì)(論文) 同步fifo的fpga設(shè)計(jì)與仿真學(xué)院名稱成都學(xué)院專業(yè)名稱機(jī)械制造設(shè)計(jì)及其自動(dòng)化學(xué)生姓名馮川學(xué)號(hào)2840840634指導(dǎo)教師鐘耀霞二一二年六月 2 abstractiv同步fifo的fpga的設(shè)計(jì)及仿真摘要:為實(shí)現(xiàn)目標(biāo)識(shí)別與跟蹤的應(yīng)用目的,在基于tms320dm642的fifo基礎(chǔ)上拓展儲(chǔ)存空間,提出一種fpga實(shí)現(xiàn)sdram控制器的方法。分析所用sdram的特點(diǎn)及工作原理,介紹fpga中sdram控制
2、器的組成及工作流程。給出應(yīng)用中的sdram的時(shí)序圖,fpga采用模塊化設(shè)計(jì),增強(qiáng)sdram控制器的通用性,更方便滿足實(shí)際需求。關(guān)鍵詞:fifo ;sdram控制器 ;fpga ;實(shí)時(shí)跟蹤 design and simulation of fifo based on fpgaabstract: in order to achieve the application of target recognition and tracking, the memory on the basis of tms320dm642 fifo is expanded. sdram controller of the
3、implementation basing on the fpga is designed ,firstly, the characteristics and principles of sdram are analyzed. then characteristics and principles of sdram controller and work flow in fpga are introduced, the application in time of sdram timing, chart is given. in order to meet the actual needs m
4、ore convenient and enhance the versatility of sdram controller fpga used modular designkey words: fifo ; sdram controller ;fpga ;real-trackingv abstractv目錄電子科技大學(xué)成都學(xué)院16第一章 引言11.1選題背景11.2研究目標(biāo)和意義11.3 研究思路2第二章 fifo設(shè)計(jì)32.1 fifo系統(tǒng)設(shè)計(jì)52.2 fifo的實(shí)現(xiàn)及控制61.3亞穩(wěn)態(tài)82.3.1什么是亞穩(wěn)態(tài)82.3.2 亞穩(wěn)態(tài)發(fā)生原因82.3.3亞穩(wěn)態(tài)的危害82.3.4亞穩(wěn)態(tài)的解決方法9
5、2.4關(guān)于fifo的一點(diǎn)的思考9第三章fpga結(jié)構(gòu)及工作原理113.1什么是fpga113.1.1邏輯陣列113.1.2嵌入式陣列133.1.3快速通道133.14i/o單元與專用輸入端口133.2 fpga基本結(jié)構(gòu)圖143.2.1查找表14ir143.2.2結(jié)構(gòu)的fpga邏輯實(shí)現(xiàn)原理153.2.3pga查找表單元內(nèi)部結(jié)構(gòu)163.2.4基于lut的fpga邏輯單元(le)內(nèi)部結(jié)構(gòu)163.3vhdl 語言173.4quartus ii18第四章 利用fpga實(shí)現(xiàn)同步fifo設(shè)置方法194.1非對稱同步fifo設(shè)計(jì)難點(diǎn)194.2非對稱同步fifo設(shè)計(jì)204.3方案實(shí)現(xiàn)234.4fifo類型254.
6、5系統(tǒng)264.6 fpga 設(shè)計(jì)274.7 fpga內(nèi)部軟fifo的設(shè)計(jì)294.8 fpga內(nèi)部軟fifo的仿真31總結(jié)33參考文獻(xiàn)34致謝35譯文36第二章 fifo設(shè)計(jì)第1章 引言1.1選題背景 fifo 是一種常用于數(shù)據(jù)緩存的電路器件,可應(yīng)用于包括高速數(shù)據(jù)采集、多處理器接口和通信中的高速緩沖等各種領(lǐng)域。在某數(shù)據(jù)采集和處理系統(tǒng)中,需要通過同步fifo 來連接8 位a/d 和16 位數(shù)據(jù)總線的mcu,但是由于目前同步fifo 器件的輸入出數(shù)據(jù)總線寬度相等,不能滿足這種應(yīng)用,因此通常采用輸入與輸出數(shù)據(jù)總線寬度均為8 位的同步f i f o 作為它們之間的數(shù)據(jù)緩沖,并對m c u 數(shù)據(jù)總線的高8
7、 位采用軟件進(jìn)行屏蔽,或是在同步fifo 外圍增加數(shù)據(jù)鎖存器及邏輯控制器件的方法解決。為了提高效率和降低系統(tǒng)設(shè)計(jì)的難度,本文采用v h d l 描述語言,充分利用xilinx 公司spartan ii fpga 的系統(tǒng)資源,設(shè)計(jì)實(shí)現(xiàn)了一種非對稱同步fifo(輸入與輸出數(shù)據(jù)總線寬度不一致的同步fifo),它不僅提供數(shù)據(jù)緩沖,而且能進(jìn)行數(shù)據(jù)總線寬度的轉(zhuǎn)換。 fpga技術(shù)自20世紀(jì)80年代中期出現(xiàn)到至今,已經(jīng)經(jīng)歷了20多年的發(fā)展,正得到越來越廣泛的應(yīng)用,它包括各個(gè)領(lǐng)域的數(shù)字系統(tǒng),數(shù)字信號(hào)(dsp)系統(tǒng)的嵌入式系統(tǒng)都可能會(huì)用到fpga器件。于此同時(shí),fpga也引起電子設(shè)計(jì)技術(shù)深刻變革,fpga的可編程
8、特性使設(shè)計(jì)者在應(yīng)用現(xiàn)場,利用計(jì)算機(jī)上自動(dòng)化設(shè)計(jì)軟件完成數(shù)字系統(tǒng)產(chǎn)品樣機(jī)的設(shè)計(jì),更新和調(diào)試,不僅縮短了產(chǎn)品的上市時(shí)間,而且也能適應(yīng)技術(shù)標(biāo)準(zhǔn)和協(xié)議的更新和升級(jí),延長了產(chǎn)品的壽命周期。 fpga技術(shù)是要求設(shè)計(jì)者的設(shè)計(jì)能力不斷的提高,除了在自動(dòng)化設(shè)計(jì)軟件的不斷提高和完善,還要求設(shè)計(jì)者有更豐富的設(shè)計(jì)知識(shí)、軟件和硬件的設(shè)計(jì)本領(lǐng)和面對實(shí)際問題的處理能力。這次我所做的是同步fifo的fpga設(shè)計(jì)及仿真,這是一個(gè)具有實(shí)用價(jià)值的課題,我希望能在這次的設(shè)計(jì)中不斷的提高自身的能力,也希望能在這次的設(shè)計(jì)中有所突破。1.2研究目標(biāo)和意義 研究同步fifo的fpga設(shè)計(jì)的目標(biāo)是:通過視頻處理和視頻圖幀格式以及fifo緩沖器
9、,提出基于fpga的視頻圖像處理系統(tǒng)設(shè)計(jì)通過研究視同步fifo的讀寫時(shí)鐘頻率相同、來源相同,這種fifo的設(shè)計(jì)較為簡單也快速,因?yàn)樗苊饬擞捎诋惒綍r(shí)鐘邏輯產(chǎn)生的許多設(shè)計(jì)中具有挑戰(zhàn)性的難題。同步fifo通常用于讀寫時(shí)鐘相同的接口部分,這種fifo相比較而言,邏輯較為簡單,延時(shí)較小,傳輸數(shù)據(jù)的速度比較快,同步fifo還具有深度可擴(kuò)展性。1.3 研究思路 首先了解同步fifo的功能及設(shè)計(jì)原理,同步vhdl語言描述、時(shí)序仿真機(jī)分析。 其次了解fpga結(jié)構(gòu)及工作原理,fpga的邏輯陣列、嵌入式陣列、快速通道、i/o單元與專用輸入端 最后利用fpga實(shí)現(xiàn)同步fifo設(shè)置,先對非對稱同步同步fifo進(jìn)行設(shè)計(jì)
10、,再了解fifo的類型、fpga的設(shè)計(jì),再對fpga內(nèi)部軟fifo進(jìn)行仿真。第二章 fifo設(shè)計(jì)1. 什么是fifo fifo是英文first in first out 的縮寫,是一種先進(jìn)先出的數(shù)據(jù)緩存器,他與普通存儲(chǔ)器的區(qū)別是沒有外部讀寫地址線,這樣使用起來非常簡單,但缺點(diǎn)就是只能順序?qū)懭霐?shù)據(jù),順序的讀出數(shù)據(jù),其數(shù)據(jù)地址由內(nèi)部讀寫指針自動(dòng)加1完成,不能像普通存儲(chǔ)器那樣可以由地址線決定讀取或?qū)懭肽硞€(gè)指定的地址。2什么情況下用fifo? fifo一般用于不同時(shí)鐘域之間的數(shù)據(jù)傳輸,比如fifo的一端時(shí)ad數(shù)據(jù)采集,另一端時(shí)計(jì)算機(jī)的pci總線,假設(shè)其ad采集的速率為16位 100k sps,那么每秒
11、的數(shù)據(jù)量為100k16bit=1.6mbps,而pci總線的速度為33mhz,總線寬度32bit,其最大傳輸速率為1056mbps,在兩個(gè)不同的時(shí)鐘域間就可以采用fifo來作為數(shù)據(jù)緩沖。另外對于不同寬度的數(shù)據(jù)接口也可以用fifo,例如單片機(jī)位8位數(shù)據(jù)輸出,而dsp可能是16位數(shù)據(jù)輸入,在單片機(jī)與dsp連接時(shí)就可以使用fifo來達(dá)到數(shù)據(jù)匹配的目的。3fifo的一些重要參數(shù) fifo的寬度:也就是英文資料里??吹降膖he width,它只的是fifo一次讀寫操作的數(shù)據(jù)位,就像mcu有8位和16位,arm 32位等等,fifo的寬度在單片成品ic中是固定的,也有可選擇的,如果用fpga自己實(shí)現(xiàn)一個(gè)f
12、ifo,其數(shù)據(jù)位,也就是寬度是可以自己定義的。 fifo的深度:the deepth,它指的是fifo可以存儲(chǔ)多少個(gè)n位的數(shù)據(jù)(如果寬度為n)。如一個(gè)8位的fifo,若深度為8,它可以存儲(chǔ)8個(gè)8位的數(shù)據(jù),深度為12 ,就可以存儲(chǔ)12個(gè)8位的數(shù)據(jù),fifo的深度可大可小,個(gè)人認(rèn)為fifo深度的計(jì)算并無一個(gè)固定的公式。在fifo實(shí)際工作中,其數(shù)據(jù)的滿/空標(biāo)志可以控制數(shù)據(jù)的繼續(xù)寫入或讀出。在一個(gè)具體的應(yīng)用中也不可能由一些參數(shù)算數(shù)精確的所需fifo深度為多少,這在寫速度大于讀速度的理想狀態(tài)下是可行的,但在實(shí)際中用到的fifo深度往往要大于計(jì)算值。一般來說根據(jù)電路的具體情況,在兼顧系統(tǒng)性能和fifo成本
13、的情況下估算一個(gè)大概的寬度和深度就可以了。而對于寫速度慢于讀速度的應(yīng)用,fifo的深度要根據(jù)讀出的數(shù)據(jù)結(jié)構(gòu)和讀出數(shù)據(jù)的由那些具體的要求來確定。 滿標(biāo)志:fifo已滿或?qū)⒁獫M時(shí)由fifo的狀態(tài)電路送出的一個(gè)信號(hào),以阻止fifo的寫操作繼續(xù)向fifo中寫數(shù)據(jù)而造成溢出(overflow)。 空標(biāo)志:fifo已空或?qū)⒁諘r(shí)由fifo的狀態(tài)電路送出的一個(gè)信號(hào),以阻止fifo的讀操作繼續(xù)從fifo中讀出數(shù)據(jù)而造成無效數(shù)據(jù)的讀出(underflow)。 讀時(shí)鐘:讀操作所遵循的時(shí)鐘,在每個(gè)時(shí)鐘沿來臨時(shí)讀數(shù)據(jù)。 寫時(shí)鐘:寫操作所遵循的時(shí)鐘,在每個(gè)時(shí)鐘沿來臨時(shí)寫數(shù)據(jù)。 讀指針:指向下一個(gè)讀出地址。讀完后自動(dòng)加1
14、。 寫指針:指向下一個(gè)要寫入的地址的,寫完自動(dòng)加1。 讀寫指針其實(shí)就是讀寫的地址,只不過這個(gè)地址不能任意選擇,而是連續(xù)的。4fifo的分類 根均fifo工作的時(shí)鐘域,可以將fifo分為同步fifo和異步fifo。同步fifo是指讀時(shí)鐘和寫時(shí)鐘為同一個(gè)時(shí)鐘。在時(shí)鐘沿來臨時(shí)同時(shí)發(fā)生讀寫操作。異步fifo是指讀寫時(shí)鐘不一致,讀寫時(shí)鐘是互相獨(dú)立的。5fifo設(shè)計(jì)的難點(diǎn) fifo設(shè)計(jì)的難點(diǎn)在于怎樣判斷fifo的空/滿狀態(tài)。為了保證數(shù)據(jù)正確的寫入或讀出,而不發(fā)生益處或讀空的狀態(tài)出現(xiàn),必須保證fifo在滿的情況下,不能進(jìn)行寫操作。在空的狀態(tài)下不能進(jìn)行讀操作。怎樣判斷fifo的滿/空就成了fifo設(shè)計(jì)的核心問
15、題。由于同步fifo幾乎很少用到,這里只描述異步fifo的空/滿標(biāo)志產(chǎn)生問題。 在用到觸發(fā)器的設(shè)計(jì)中,不可避免的會(huì)遇到亞穩(wěn)態(tài)的問題。在涉及到觸發(fā)器的電路中,亞穩(wěn)態(tài)無法徹底消除,只能想辦法將其發(fā)生的概率將到最低。其中的一個(gè)方法就是使用格雷碼。格雷碼在相鄰的兩個(gè)碼元之間只由一位變換(二進(jìn)制碼在很多情況下是很多碼元在同時(shí)變化)。這就會(huì)避免計(jì)數(shù)器與時(shí)鐘同步的時(shí)候發(fā)生亞穩(wěn)態(tài)現(xiàn)象。但是格雷碼有個(gè)缺點(diǎn)就是只能定義2n的深度,而不能像二進(jìn)制碼那樣隨意的定義fifo的深度,因?yàn)楦窭状a必須循環(huán)一個(gè)2n,否則就不能保證兩個(gè)相鄰碼元之間相差一位的條件,因此也就不是真正的各雷碼了。第二就是使用冗余的觸發(fā)器,假設(shè)一個(gè)觸發(fā)
16、器發(fā)生亞穩(wěn)態(tài)的概率為p,那么兩個(gè)及聯(lián)的觸發(fā)器發(fā)生亞穩(wěn)態(tài)的概率就為p的平方。但這回導(dǎo)致延時(shí)的增加。亞穩(wěn)態(tài)的發(fā)生會(huì)使得fifo出現(xiàn)錯(cuò)誤,讀/寫時(shí)鐘采樣的地址指針會(huì)與真實(shí)的值之間不同,這就導(dǎo)致寫入或讀出的地址錯(cuò)誤。由于考慮延時(shí)的作用,空/滿標(biāo)志的產(chǎn)生并不一定出現(xiàn)在fifo真的空/滿時(shí)才出現(xiàn)??赡躥ifo還未空/滿時(shí)就出現(xiàn)了空/滿標(biāo)志。這并沒有什么不好,只要保證fifo不出現(xiàn)overflow or underflow 就ok了2.1 fifo系統(tǒng)設(shè)計(jì) fifo系統(tǒng)由fgpa和sdram兩部分組成。其中,fgpa內(nèi)部包含fifo.、緩沖器、sdram控制器三個(gè)模塊。fifo.的作用是將fifo的狀態(tài)轉(zhuǎn)變
17、成狀態(tài)機(jī)的讀、寫信號(hào)。若操作為向sdram寫數(shù)據(jù),則在fifo已滿時(shí),fifo.送出一個(gè)信號(hào),以阻止寫操作繼續(xù)向fifo中寫數(shù)據(jù)而造成溢出;若操作為向sdram讀數(shù)據(jù),則在緩沖器已空時(shí),fifo.送出一個(gè)信號(hào),以阻止讀操作繼續(xù)從fifo中讀數(shù)據(jù)而造成無效數(shù)據(jù)的讀出。fifo的模塊結(jié)構(gòu)如圖1所示。 sdram控制器內(nèi)部包括:初始化模塊、模式寄存器、控制模塊和狀態(tài)機(jī)。sdram的接口設(shè)計(jì)是極其關(guān)鍵的,可根據(jù)sdram內(nèi)部操作狀態(tài)之間的聯(lián)系,通過狀態(tài)機(jī)來實(shí)現(xiàn)接口設(shè)計(jì)。初始化模塊負(fù)責(zé)sdram的初始化,在上電和時(shí)鐘穩(wěn)定后等待100 ms,至少執(zhí)行一條空操作,然后對所有頁執(zhí)行預(yù)充電操作,使所有頁處于空閑
18、狀態(tài),接著向各頁發(fā)出兩條刷新操作指令,最后發(fā)出一個(gè)模式寄存器裝載命令,使sdram有確定的狀態(tài)進(jìn)行讀寫操作。模式寄存器可根據(jù)要求對sdram的突發(fā)長度、突發(fā)類型、cas延時(shí)的時(shí)鐘數(shù)、運(yùn)行模式和寫突發(fā)模式進(jìn)行設(shè)置,確定sdram在讀寫操作時(shí)的工作狀態(tài)。模式寄存器m0m2用于規(guī)定突發(fā)長度,可以為1,2,4,8。m3用于規(guī)定突發(fā)類型,當(dāng)m3=0時(shí),突發(fā)類型是連續(xù)的;當(dāng)m3=1時(shí),突發(fā)類型是交錯(cuò)的。m4m6用于規(guī)定cas延遲的時(shí)鐘周期數(shù),可以分為1,2,3。m7,m8用于規(guī)定運(yùn)行模式。m9用于規(guī)定寫突發(fā)模式,當(dāng)m9=0時(shí),按實(shí)際編程的突發(fā)長度存??;當(dāng)m9=1時(shí),按單個(gè)存取單元寫入,但可按實(shí)際編程的突發(fā)
19、長度讀出。sdram控制器的模塊結(jié)構(gòu)如圖2所示 2.2 fifo的實(shí)現(xiàn)及控制 設(shè)計(jì)中采用fpga來實(shí)現(xiàn)雙通道數(shù)據(jù)的緩存和數(shù)據(jù)傳輸?shù)倪壿嬁刂?。spartan3e是一款高性能低價(jià)格的可編程邏輯器件,具有豐富的邏輯單元和存儲(chǔ)單元。其內(nèi)部的blockram可以配置為大小不同的各種類型存儲(chǔ)器,如單口ram、雙口ram和同步fifo,其中fifo更適合作為a/d 采樣數(shù)據(jù)高速寫入的存儲(chǔ)器。fifo存儲(chǔ)器就像數(shù)據(jù)管道一樣,數(shù)據(jù)從管道的一頭流入、從另一頭流出,先進(jìn)入的數(shù)據(jù)先流出。fifo具有兩套數(shù)據(jù)線而無地址線,可在其一端寫操作而在另一端進(jìn)行讀操作,數(shù)據(jù)在其中順序移動(dòng),從而達(dá)到很高的傳輸速度和效率,且由于省去
20、了地址線,有利于pcb板布線。 采用fifo構(gòu)成高速a/d采樣緩存時(shí),由于轉(zhuǎn)換速度較快,如果直接將adc采樣后的數(shù)據(jù)存儲(chǔ)到fifo中,對時(shí)序配置要求非常嚴(yán)格,如果兩者時(shí)序關(guān)系配合不當(dāng),就會(huì)發(fā)生數(shù)據(jù)存儲(chǔ)出錯(cuò)或者掉數(shù)。利用fpga可以方便地控制時(shí)序和數(shù)據(jù)傳輸,簡單、可靠地實(shí)現(xiàn)采樣和存儲(chǔ)是選用fpga的優(yōu)點(diǎn)。該數(shù)據(jù)采集系統(tǒng)中只采用了一個(gè)外部時(shí)鐘源,直接輸入到fpga,經(jīng)dcm分頻后作為fifo和adc的時(shí)鐘源。 在軟件設(shè)計(jì)中,采用ise開發(fā)環(huán)境開發(fā)fpga時(shí),調(diào)用core generator來構(gòu)造fifo,可以設(shè)置fifo的參數(shù),如深度和寬度;設(shè)置fifo的各種標(biāo)志和控制位,如空滿、半滿全滿、半空全
21、空、可編程滿和可編程空等標(biāo)志位;寫使能、讀使能等控制位,以便實(shí)現(xiàn)與高速a/d和dsp的邏輯接口。fifo的輸入輸出引腳如表所示:其中wr_en由dsp的gpio 口引出,控制數(shù)據(jù)是否寫入到fifo中,輸出引腳中只用到了prog_full即可與dsp進(jìn)行數(shù)據(jù)傳輸。 fpga的作用除了構(gòu)造fifo以實(shí)現(xiàn)數(shù)據(jù)通道復(fù)用外,還可以作為協(xié)處理器進(jìn)行實(shí)時(shí)要求性高的數(shù)據(jù)預(yù)處理(如插值、取平均、fir濾波等),以減少dsp處理的數(shù)據(jù)量。設(shè)計(jì)中采用分布式算法的fir濾波,首先對adc轉(zhuǎn)換后的數(shù)據(jù)進(jìn)行fir濾波,然后存入fifo中以等待dsp的讀取。 fpga代替asic和dsp作為前端數(shù)字信號(hào)處理的運(yùn)算,在規(guī)模、
22、重量和功耗方面都有所降低,而且吞吐量更高,開發(fā)成本進(jìn)一步縮小。 fpga設(shè)計(jì)中,需提供外部閃存來存儲(chǔ)fpga的下載文件,上電后數(shù)據(jù)會(huì)自動(dòng)下載到fpga內(nèi)部,以對fpga進(jìn)行配置。fpga有多種配置方式,包括主串、從串、主并、從并、spi、bpi,以及jtag等方式。串行方式即逐位串行配置,接線簡單,但速度比較慢,并行方式即8位同時(shí)傳輸,速度快,但接線復(fù)雜。串行方式和并行方式都需要外加閃存作為配置文件的存儲(chǔ)器。設(shè)計(jì)中本文采用c6416的多通道緩存串行口(mcbsp)以spi方式對fpga進(jìn)行配置。圖1:系統(tǒng)結(jié)構(gòu)框圖1.3亞穩(wěn)態(tài)亞穩(wěn)態(tài)是指出發(fā)前無法在某個(gè)規(guī)定的時(shí)間內(nèi)達(dá)到一個(gè)可確定的狀態(tài)。當(dāng)一個(gè)觸發(fā)
23、器進(jìn)人亞穩(wěn)態(tài)時(shí),既無法預(yù)測單元輸出電平,也無法預(yù)測什么時(shí)候輸出才穩(wěn)定在某個(gè)正確的電平上。在這個(gè)穩(wěn)定的期間,觸發(fā)器輸出一些中間級(jí)電平,或者可能處于震蕩狀態(tài),并且這種無用的輸出電平可以沿信號(hào)通道上的各個(gè)觸發(fā)器級(jí)聯(lián)式傳播下去。2.3.1什么是亞穩(wěn)態(tài)數(shù)字電路中的簡單雙穩(wěn)態(tài)電路就是兩個(gè)反相器首尾相連組成(加一些控制邏輯變成鎖存器,觸發(fā)器),然而并不像名字顯示的,這種電路其實(shí)還有第三種半穩(wěn)定態(tài)就是當(dāng)兩個(gè)反相器都處于中間值的情況這稱之為亞穩(wěn)態(tài)。2.3.2 亞穩(wěn)態(tài)發(fā)生原因在同步系統(tǒng)中,如果觸發(fā)器的setup time/hold time不滿足,就可能產(chǎn)生亞穩(wěn)態(tài),此時(shí)觸發(fā)器輸出端q在有效時(shí)鐘沿之后比較長的一段時(shí)
24、間處于不確定的狀態(tài),在這段時(shí)間里q端毛刺、震蕩、固定的某一電壓值,而不是等于數(shù)據(jù)輸入端d的值。這段之間成為決斷時(shí)間(resolution time)。經(jīng)過resolution time之后q端將穩(wěn)定到0或1上,但是究竟是0還是1,這是隨機(jī)的,與輸入某一必然的關(guān)系。2.3.3亞穩(wěn)態(tài)的危害由于輸出在穩(wěn)定下來之前可能是毛刺、震蕩、固定的某一電壓值,因此亞穩(wěn)態(tài)除了導(dǎo)致邏輯誤判之外,輸出01之間的中間電壓值還會(huì)使下一級(jí)產(chǎn)生亞穩(wěn)態(tài)(即導(dǎo)致 亞穩(wěn)態(tài)的傳播)。邏輯誤判有可能通過電路的特殊設(shè)計(jì)減輕危害,而亞穩(wěn)態(tài)的傳播則擴(kuò)大了故障面,難以處理。2.3.4亞穩(wěn)態(tài)的解決方法 只要系統(tǒng)中有異步元件,亞穩(wěn)態(tài)就是無法避免的
25、,因此設(shè)計(jì)的電路首先要減少亞穩(wěn)態(tài)導(dǎo)致錯(cuò)誤的發(fā)生,其次要使系統(tǒng)對產(chǎn)生的錯(cuò)誤不敏感。前者用同步來實(shí)現(xiàn),而后者根據(jù)不同的設(shè)計(jì)應(yīng)用不同的處理方法。用同步來減少亞穩(wěn)態(tài)發(fā)生的機(jī)會(huì)的典型電路如圖 左邊為異步輸入端,經(jīng)過兩級(jí)觸發(fā)器同步,在右邊輸出將是同步的,而且該輸出基本不存在亞穩(wěn)態(tài)。其原理是即第一個(gè)觸發(fā)器的輸出端存在亞穩(wěn)態(tài),經(jīng)過一個(gè)clk周期后,第二個(gè)觸發(fā)器d端的電平仍未穩(wěn)定的概率非常小,因此第二個(gè)觸發(fā)器q端基本不會(huì)產(chǎn)生亞穩(wěn)態(tài)。注意,這里說的是“基本”,也就是無法“根除”,那么如果第二觸發(fā)器q出現(xiàn)亞穩(wěn)態(tài)會(huì)有什么后果呢?后果的嚴(yán)重程度是由設(shè)計(jì)絕定的,如果系統(tǒng)對產(chǎn)生的錯(cuò)誤不敏感,那么系統(tǒng)可能正常工作,或者經(jīng)過短
26、暫的異常之后可以恢復(fù)正常工作,如果設(shè)計(jì)上沒有考慮如何降低系統(tǒng)對亞穩(wěn)態(tài)的敏感程度,那么一旦出現(xiàn)亞穩(wěn)態(tài)系統(tǒng)就可能崩潰。2.4關(guān)于fifo的一點(diǎn)的思考關(guān)于fifo丟數(shù)據(jù)的問題,其實(shí)各位對同一個(gè)問題的理解有偏差,才造成了相互誤解。如果在理想狀況下(時(shí)鐘同步不回出現(xiàn)錯(cuò)碼),fifo由讀寫指針控制是不會(huì)丟數(shù)的,(這不是廢話嗎,現(xiàn)實(shí)中哪來的理想狀況?。┣衣?,我的意思是說丟數(shù)據(jù)并不是讀寫誰快誰慢造成的,在正確的設(shè)置空滿標(biāo)志算法的情況下,數(shù)據(jù)的overflow 和underflow 是不會(huì)發(fā)生的。而往往現(xiàn)實(shí)中因?yàn)閬喎€(wěn)態(tài)的存在,才出現(xiàn)了丟數(shù)的情況,也就是說是只要讀寫時(shí)鐘不同步,在采樣的過程中采樣出錯(cuò),使得本該是0
27、100的變成了1101等等,就會(huì)出現(xiàn)讀寫的錯(cuò)誤,我們稱其為丟數(shù),其原因就是在時(shí)鐘同步指針的時(shí)候出現(xiàn)亞穩(wěn)態(tài),由于二進(jìn)制碼加1的時(shí)候很多位同時(shí)變化,所以很容易出現(xiàn)亞穩(wěn)態(tài)。因此才用格雷碼將此問題發(fā)生的概率比降到最小,其次用多余的觸發(fā)器使其概率進(jìn)一步降低,也就是說錯(cuò)誤難免,但我們可以將其發(fā)生的概率降到最低,并且在出現(xiàn)錯(cuò)誤時(shí)也不會(huì)錯(cuò)的態(tài)離譜(詳見vijay a. nebhrajani的異步fifo結(jié)構(gòu)第二篇)。 二進(jìn)制碼指針并非不好用,在前面也提到了它有自身的優(yōu)勢,由于通過設(shè)置握手信號(hào),指針可以有多位同時(shí)變化,二進(jìn)制指針每次移動(dòng)可以跳躍過任意的長度,這樣給fifo的某些功能的實(shí)現(xiàn)帶來了方便(例如,硬件直
28、接控制fifo從緩存的數(shù)據(jù)流中丟棄一個(gè)出錯(cuò)的包);而格雷碼指針一般只能做遞增或遞減的移動(dòng)。設(shè)置握手信號(hào)雖然可以保證指針不出錯(cuò),但這樣你來我往的經(jīng)過三四個(gè)回合才能開始傳數(shù)據(jù),所以對于高速的場合就不適用了。49第三章 fpga結(jié)構(gòu)及工作原理 第三章fpga結(jié)構(gòu)及工作原理3.1什么是fpga fpga采用了邏輯單元陣列l(wèi)c fpga是英文field programmable gate array的縮寫,即現(xiàn)場可編程門陣列,它是在pal、gal、pld等可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物。它是作為專用集成電路(asic)領(lǐng)域中的一種半定制電路而出現(xiàn)的,既解決了定制電路的不足,又克服了原有可編程器件門電
29、路數(shù)有限的缺點(diǎn)。 a(logic cell array)這樣一個(gè)新概念,內(nèi)部包括可配置邏輯模塊clb(configurable logic block)、輸出輸入模塊iob(input output block)和內(nèi)部連線(interconnect)三個(gè)部分。fpga的基本特點(diǎn)主要有: 1)采用fpga設(shè)計(jì)asic電路,用戶不需要投片生產(chǎn),就能得到合用的芯片。 2)fpga可做其它全定制或半定制asic電路的中試樣片。 3)fpga內(nèi)部有豐富的觸發(fā)器和io引腳。 4)fpga是asic電路中設(shè)計(jì)周期最短、開發(fā)費(fèi)用最低、風(fēng)險(xiǎn)最小的器件之一。 5) fpga采用高速chmos工藝,功耗低,可以與c
30、mos、ttl電平兼容。 3.1.1邏輯陣列邏輯陣列由一系列邏輯陣列塊(lab)構(gòu)成。每個(gè)lab由八個(gè)邏輯單元(le)和一些局部互連組成。每個(gè)lab相當(dāng)于96個(gè)可用邏輯門,可用構(gòu)成一個(gè)中規(guī)模的邏輯塊,如8位計(jì)數(shù)器、地址譯碼器或狀態(tài)機(jī)等。也可用將多個(gè)lab組合起來構(gòu)成一個(gè)更大規(guī)模的邏輯塊。邏輯陣列l(wèi)ab(logic array block)是由一系列的相鄰le構(gòu)成的。每個(gè)lab包括八個(gè)le相連的進(jìn)位鏈和級(jí)聯(lián)鏈,lab控制信號(hào)與lab局部互連。lab構(gòu)成了開發(fā)軟件的“粗粒度”結(jié)構(gòu),有利于eda軟件進(jìn)行布局線,優(yōu)化器件的利用,提高可能性。邏輯單元le(logic element)是flex10k/a
31、cex1k結(jié)構(gòu)中最小單元,它能有效的實(shí)現(xiàn)邏輯功能。每個(gè)le包括一個(gè)4輸入的lut、一個(gè)帶有使能的可編程觸發(fā)器。一個(gè)進(jìn)位鏈和一個(gè)級(jí)聯(lián)鏈。每個(gè)le有兩個(gè)輸出,分別可以驅(qū)動(dòng)局部互連和快速通道(fsat track)互連。le中的lut是一種函數(shù)發(fā)生器,它能實(shí)現(xiàn)4輸入的任意邏輯函數(shù)。lr中的可編程觸發(fā)器可設(shè)置成d、t、jk或rs觸發(fā)器。該寄存器的時(shí)鐘、清零和置位信號(hào)可由全局信號(hào)、通用i/o引腳或任何內(nèi)部邏輯驅(qū)動(dòng)。對于組合邏輯的實(shí)現(xiàn),可將觸發(fā)器旁路,lut輸出作為le的輸出。le有兩個(gè)驅(qū)動(dòng)內(nèi)部互連的輸出信號(hào)。一個(gè)用于驅(qū)動(dòng)局部互連,另一個(gè)用于驅(qū)動(dòng)性和列的快速通道的互連輸出。這兩個(gè)輸出信號(hào)可以單獨(dú)控制??梢?/p>
32、實(shí)現(xiàn)在一個(gè)le中,lut驅(qū)動(dòng)一個(gè)輸出,而寄存器驅(qū)動(dòng)另一個(gè)輸出。因?yàn)樵谝粋€(gè)le中觸發(fā)器和lut能夠用來完成不相關(guān)的功能,因而能夠提高le的資源利用率。在flex10k/acex1k結(jié)構(gòu)中還提供了兩種專用高速數(shù)據(jù)通道:進(jìn)位鏈(carry-in)和級(jí)聯(lián)鏈(cascade-in),用于連接相鄰的le,但不占用局部互連通路。進(jìn)位鏈提供le之間快速的向前進(jìn)功能。來自低位的進(jìn)位信號(hào)進(jìn)位鏈向前送到高位,同時(shí)饋入lut和進(jìn)位鏈的下一段。這一特點(diǎn)使得flex10k/acex1k結(jié)構(gòu)能夠?qū)崿F(xiàn)高速設(shè)計(jì)器、加法器和寬位的比較器。級(jí)聯(lián)鏈可以用來實(shí)現(xiàn)多輸入(wide-input)邏輯函數(shù),而且延時(shí)很小。相鄰的lut用來并行
33、地完成部分邏輯功能,級(jí)聯(lián)鏈把中間結(jié)果串接起來。級(jí)聯(lián)鏈可以使用邏輯“與”或者邏輯“或”來連接相鄰le的輸出。每增加一個(gè)le,邏輯的有效輸入寬度增加4個(gè),其延遲會(huì)增加約0.7ns。級(jí)聯(lián)鏈和進(jìn)位鏈可以連接同一個(gè)lab中的所有l(wèi)e和同一行中所有l(wèi)ab,但是進(jìn)位鏈和級(jí)聯(lián)鏈的大量使用會(huì)限制邏輯布線的靈活性,會(huì)導(dǎo)致資源的浪費(fèi),因此,使用進(jìn)位鏈和級(jí)聯(lián)鏈限于速度有要求的關(guān)鍵部分設(shè)計(jì)。進(jìn)位鏈和級(jí)聯(lián)鏈都可由開發(fā)軟件在進(jìn)行設(shè)計(jì)處理時(shí)自動(dòng)生成。flex10k/acex1k的le共有4種工作模式:正常模式、運(yùn)算模式、加減法計(jì)數(shù)模式和可清零計(jì)數(shù)模式。每種模式中,le的7個(gè)可用輸入信號(hào)被連接到不同的位置,以實(shí)現(xiàn)所要求的邏輯功
34、能。這7個(gè)輸入信號(hào)時(shí)來自lab局部互連的4個(gè)數(shù)據(jù)輸入,來自可編程寄存器的反饋信號(hào)以及一個(gè)le的進(jìn)位輸入和級(jí)聯(lián)輸入。另外加到le的其余3個(gè)輸入為寄存器提供時(shí)鐘、清零和置位信號(hào)。在所有的4種模式下,flex10k/acex1k結(jié)構(gòu)還為寄存器提供了一個(gè)同步時(shí)鐘使能端,利于實(shí)現(xiàn)全同步設(shè)計(jì)3.1.2嵌入式陣列 嵌入式陣列由一系列嵌入式陣列塊(eab)構(gòu)成。在要實(shí)現(xiàn)存儲(chǔ)器功能時(shí),每個(gè)eab可提供2048個(gè)存儲(chǔ)位,用來構(gòu)成ram、rom、fifo、和雙口ram。在實(shí)現(xiàn)器、微控制器、狀態(tài)機(jī)及復(fù)雜邏輯時(shí),每個(gè)eab可貢獻(xiàn)100到600個(gè)門,eab可單獨(dú)使用,也可組合使用。如果需要,一個(gè)器件中所有的eab可級(jí)聯(lián)成
35、一個(gè)單一ram,eab級(jí)聯(lián)形成的ram塊不影響時(shí)序。3.1.3快速通道 在flex10k/acex1k結(jié)構(gòu)中,le和器件i/o引腳之間的連接時(shí)通過快速通道互連實(shí)現(xiàn)。快速通道遍布于整個(gè)器件,是一系列水平和垂直走向的連續(xù)式不線通道。3.14i/o單元與專用輸入端口flex10k/acex1k器件的i/o引腳是由一些i/o單元(ioe或ioc)驅(qū)動(dòng)的。ioe位于快速通道的行和列的末端,包括一個(gè)雙向i/o緩沖器和一個(gè)寄存器,這個(gè)寄存器可以用作需要快速建立時(shí)間的外部數(shù)據(jù)的輸入寄存器,也可以作為要求快速“時(shí)鐘到輸出”性能的數(shù)據(jù)輸出寄存器。在某些情況下,le作為輸入寄存器比ioc寄存器在建立時(shí)間上會(huì)更短。i
36、oc樂意配置成輸入/輸出雙向口。此外ioc還具有許多的特性,每個(gè)ioc的時(shí)鐘、清零、時(shí)鐘使能和輸出使能控制均由i/o控制信號(hào)網(wǎng)絡(luò)提供,采用高速驅(qū)動(dòng)以減小通過器件的時(shí)間差。ioc的結(jié)構(gòu)如圖 flex10k/acex1k器件還提供了六個(gè)專用輸入引腳,這些引腳用來驅(qū)動(dòng)ioc控制器,使用了專用的布線通道,以便具有比快速通道更短的延遲或更小的偏移。專用輸入中的4個(gè)輸入引腳可用來驅(qū)動(dòng)全局信號(hào),內(nèi)部邏輯也可驅(qū)動(dòng)4個(gè)全局信號(hào)。3.2 fpga基本結(jié)構(gòu)圖iobirirclbiriririririrclbclbiririririririririobiobiobiobiobiobiobiobiobiobiobclb
37、clbclbclbclbclbfpga的基本結(jié)構(gòu)圖3.2.1查找表 大部分fpga采用的是基于sram(靜態(tài)隨機(jī)存儲(chǔ)器)的查找表邏輯形成結(jié)構(gòu),就是用sram來構(gòu)成邏輯函數(shù)發(fā)生器。一個(gè)n輸入查找表(lut可實(shí)現(xiàn)n個(gè)輸入變量的任何邏輯功能。實(shí)際邏輯電路lut的實(shí)現(xiàn)方式 a,b,c,d 輸入邏輯輸出地址ram中存儲(chǔ)的內(nèi)容00000000000001000010.0.011111111113.2.2結(jié)構(gòu)的fpga邏輯實(shí)現(xiàn)原理 3.2.3pga查找表單元內(nèi)部結(jié)構(gòu)a,b,c,d由fpga芯片的管腳輸入后進(jìn)入可編程連線,然后作為地址線連到lut,lut中已事先寫入了所有可能的邏輯結(jié)果,通過地址查找到相應(yīng)的數(shù)
38、據(jù)然后輸出,這樣組合邏輯就實(shí)現(xiàn)了。3.2.4基于lut的fpga邏輯單元(le)內(nèi)部結(jié)構(gòu) 3.3vhdl 語言 vhdl 的英文全名是 very-high-speed integrated circuit hardware description language,誕生于 1982 年。1987 年底,vhdl被 ieee 和美國國防部確認(rèn)為標(biāo)準(zhǔn)硬件描述語言。 vhdl主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu),行為,功能和接口。除了含有許多具有硬件特征的語句外,vhdl的語言形式和描述風(fēng)格與句法是十分類似于一般的計(jì)算機(jī)高級(jí)語言。vhdl的程序結(jié)構(gòu)特點(diǎn)是將一項(xiàng)工程設(shè)計(jì),或稱設(shè)計(jì)實(shí)體(可以是一個(gè)元件,一個(gè)電路模
39、塊或一個(gè)系統(tǒng))分成外部(或稱可視部分,及端口)和內(nèi)部(或稱不可視部分),既涉及實(shí)體的內(nèi)部功能和算法完成部分。在對一個(gè)設(shè)計(jì)實(shí)體定義了外部界面后,一旦其內(nèi)部開發(fā)完成后,其他的設(shè)計(jì)就可以直接調(diào)用這個(gè)實(shí)體。這種將設(shè)計(jì)實(shí)體分成內(nèi)外部分的概念是vhdl系統(tǒng)設(shè)計(jì)的基本點(diǎn)。vhdl 語言能夠成為標(biāo)準(zhǔn)化的硬件描述語言并獲得廣泛應(yīng)用,它自身必然具有很多其他硬件描述語言所不具備的優(yōu)點(diǎn)。歸納起來,vhdl 語言主要具有以下優(yōu)點(diǎn):1 (1) vhdl 語言功能強(qiáng)大,設(shè)計(jì)方式多樣 vhdl 語言具有強(qiáng)大的語言結(jié)構(gòu),只需采用簡單明確的vhdl語言程序就可以描述十分復(fù)雜的硬件電路。同時(shí),它還具有多層次的電路設(shè)計(jì)描述功能。此外
40、,vhdl 語言能夠同時(shí)支持同步電路、異步電路和隨機(jī)電路的設(shè)計(jì)實(shí)現(xiàn),這是其他硬件描述語言所不能比擬的。vhdl 語言設(shè)計(jì)方法靈活多樣,既支持自頂向下的設(shè)計(jì)方式,也支持自底向上的設(shè)計(jì)方法; 既支持模塊化設(shè)計(jì)方法,也支持層次化設(shè)計(jì)方法。 vhdl 語言具有強(qiáng)大的硬件描述能力 vhdl 語言具有多層次的電路設(shè)計(jì)描述功能,既可描述系統(tǒng)級(jí)電路,也可以描述門級(jí)電路;描述方式既可以采用行為描述、寄存器傳輸描述或者結(jié)構(gòu)描述,也可以采用三者的混合描述方式。同時(shí),vhdl 語言也支持慣性延遲和傳輸延遲,這樣可以準(zhǔn)確地建立硬件電路的模型。vhdl 語言的強(qiáng)大描述能力還體現(xiàn)在它具有豐富的數(shù)據(jù)類型。vhdl 語言既支持
41、標(biāo)準(zhǔn)定義的數(shù)據(jù)類型,也支持用戶定義的數(shù)據(jù)類型,這樣便會(huì)給硬件描述帶來較大的自由度。 (3) vhdl 語言具有很強(qiáng)的移植能力 vhdl 語言很強(qiáng)的移植能力主要體現(xiàn)在: 對于同一個(gè)硬件電路的 vhdl 語言描述,它可以從一個(gè)模擬器移植到另一個(gè)模擬器上、從一個(gè)綜合器移植到另一個(gè)綜合器上或者從一個(gè)工作平臺(tái)移植到另一個(gè)工作平臺(tái)上去執(zhí)行。 (4) vhdl 語言的設(shè)計(jì)描述與器件無關(guān) 采用 vhdl 語言描述硬件電路時(shí),設(shè)計(jì)人員并不需要首先考慮選擇進(jìn)行設(shè)計(jì)的器件。這樣做的好處是可以使設(shè)計(jì)人員集中精力進(jìn)行電路設(shè)計(jì)的優(yōu)化,而不需要考慮其他的問題。當(dāng)硬件電路的設(shè)計(jì)描述完成以后,vhdl 語言允許采用多種不同的器
42、件結(jié)構(gòu)來實(shí)現(xiàn)。 (5) vhdl 語言程序易于共享和復(fù)用 vhdl 語言采用基于庫 ( library) 的設(shè)計(jì)方法。在設(shè)計(jì)過程中,設(shè)計(jì)人員可以建立各種可再次利用的模塊,一個(gè)大規(guī)模的硬件電路的設(shè)計(jì)不可能從門級(jí)電路開始一步步地進(jìn)行設(shè)計(jì),而是一些模塊的累加。這些模塊可以預(yù)先設(shè)計(jì)或者使用以前設(shè)計(jì)中的存檔模塊,將這些模塊存放在庫中,就可以在以后的設(shè)計(jì)中進(jìn)行復(fù)用。 由于 vhdl 語言是一種描述、模擬、綜合、優(yōu)化和布線的標(biāo)準(zhǔn)硬件描述語言,因此它可以使設(shè)計(jì)成果在設(shè)計(jì)人員之間方便地進(jìn)行交流和共享,從而減小硬件電路設(shè)計(jì)的工作量,縮短開發(fā)周期。 3.4quartus ii quartus ii 是altera公
43、司的綜合性pld開發(fā)軟件,支持原理圖、vhdl、veriloghdl以及ahdl(altera hardware description language)等多種設(shè)計(jì)輸入形式,內(nèi)嵌自有的綜合器以及仿真器,可以完成從設(shè)計(jì)輸入到硬件配置的完整pld設(shè)計(jì)流程。quartus ii可以在xp、linux以及unix上使用,除了可以使用tcl腳本完成設(shè)計(jì)流程外,提供了完善的用戶圖形界面設(shè)計(jì)方式。具有運(yùn)行速度快,界面統(tǒng)一,功能集中,易學(xué)易用等特點(diǎn)。quartus ii支持altera的ip核,包含了lpm/megafunction宏功能模塊庫,使用戶可以充分利用成熟的模塊,簡化了設(shè)計(jì)的復(fù)雜性、加快了設(shè)計(jì)速
44、度。對第三方eda工具的良好支持也使用戶可以在設(shè)計(jì)流程的各個(gè)階段使用熟悉的第三方eda工具。此外,quartus ii 通過和dsp builder工具與matlab/simulink相結(jié)合,可以方便地實(shí)現(xiàn)各種dsp應(yīng)用系統(tǒng);支持altera的片上可編程系統(tǒng)(sopc)開發(fā),集系統(tǒng)級(jí)設(shè)計(jì)、嵌入式軟件開發(fā)、可編程邏輯設(shè)計(jì)于一體,是一種綜合性的開發(fā)平臺(tái)。maxplus ii 作為altera的上一代pld設(shè)計(jì)軟件,由于其出色的易用性而得到了廣泛的應(yīng)用。目前altera已經(jīng)停止了對maxplus ii 的更新支持,quartus ii 與之相比不僅僅是支持器件類型的豐富和圖形界面的改變。altera
45、在quartus ii 中包含了許多諸如signaltap ii、chip editor和rtl viewer的設(shè)計(jì)輔助工具,集成了sopc和hardcopy設(shè)計(jì)流程,并且繼承了maxplus ii 友好的圖形界面及簡便的使用。第四章 利用fpga實(shí)現(xiàn)同步fifo設(shè)置方法第4章 利用fpga實(shí)現(xiàn)同步fifo設(shè)置方法 目前常用的fifo都是讀/寫端口數(shù)據(jù)寬度相同的同步或異步fifo結(jié)構(gòu),雖然可滿足工程需要的大部分要求;但在某些對數(shù)據(jù)處理實(shí)時(shí)性要求較高、數(shù)據(jù)吞吐率大的圖像處理和信號(hào)處理等場合。如果仍舊采用常用的fifo存儲(chǔ)器,將會(huì)導(dǎo)致系統(tǒng)實(shí)時(shí)性明顯下降,發(fā)生數(shù)據(jù)溢出、丟失等嚴(yán)重錯(cuò)誤。因此設(shè)計(jì)非對稱
46、同步或異步fifo就顯得十分重要。 ifo 是一種常用于數(shù)據(jù)緩存的電路器件,可應(yīng)用于包括高速數(shù)據(jù)采集、多處理器接口和通信中的高速緩沖等各種領(lǐng)域。然而在某些應(yīng)用,例如在某數(shù)據(jù)采集和處理系統(tǒng)中,需要通過同步fifo 來連接8 位a/d 和16 位數(shù)據(jù)總線的mcu,但是由于目前同步fifo 器件的輸入與輸出數(shù)據(jù)總線寬度相等,不能滿足這種應(yīng)用,因此通常采用輸入與輸出數(shù)據(jù)總線寬度均為8 位的同步f i f o 作為它們之間的數(shù)據(jù)緩沖,并對m c u 數(shù)據(jù)總線的高8 位采用軟件進(jìn)行屏蔽,或是在同步fifo 外圍增加數(shù)據(jù)鎖存器及邏輯控制器件的方法解決。為了提高效率和降低系統(tǒng)設(shè)計(jì)的難度,本文采用v h d l
47、 描述語言,充分利用xilinx 公司spartan ii fpga 的系統(tǒng)資源,設(shè)計(jì)實(shí)現(xiàn)了一種非對稱同步fifo(輸入與輸出數(shù)據(jù)總線寬度不一致的同步fifo),它不僅提供數(shù)據(jù)緩沖,而且能進(jìn)行數(shù)據(jù)總線寬度的轉(zhuǎn)換4.1非對稱同步fifo設(shè)計(jì)難點(diǎn)非對稱同步fifo 的設(shè)計(jì)來說,不能簡單地通過修改現(xiàn)成的同步fifo 模塊而得到,這是因?yàn)榉菍ΨQ同步fifo 的設(shè)計(jì)有以下幾個(gè)需要解決的難點(diǎn)問題:(1) 寫數(shù)據(jù)與讀數(shù)據(jù)總線寬度不同。設(shè)寫數(shù)據(jù)與讀數(shù)據(jù)總線寬度分別為 對于win 和wout,必須對winwout和winwout 這兩種情況進(jìn)行寫數(shù)據(jù)與讀數(shù)據(jù)總線寬度的正確轉(zhuǎn)換。(2) 如何協(xié)調(diào)內(nèi)部處理過程中不同
48、的時(shí)鐘頻率。例如輸入2個(gè)8位字節(jié)需2 個(gè)時(shí)鐘周期,而輸出1 個(gè)16位字節(jié)只需1 個(gè)時(shí)鐘周期,所以必須為內(nèi)部數(shù)據(jù)處理提供不同的時(shí)鐘頻率。(3) 由于寫數(shù)據(jù)與讀數(shù)據(jù)總線寬度不同,所以,要操作正確,必須保證數(shù)據(jù)存儲(chǔ)排列的順序及空/ 滿標(biāo)志產(chǎn)生的正確。另外,由于fpga 中的寄存器個(gè)數(shù)有限,而fifo 是一種基于ram的器件,需要占用大量的存儲(chǔ)空間。通常在編寫vhdl 程序時(shí)用數(shù)組描述的方法來設(shè)計(jì)數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),在綜合時(shí)會(huì)耗用大量的寄存器,所以這種方法在fifo 的設(shè)計(jì)中是不可行的。4.2非對稱同步fifo設(shè)計(jì) 針對以上設(shè)計(jì)中的難點(diǎn),本文采用vhdl 描述語言,利用xilinx公司spartan ii
49、fpga設(shè)計(jì)實(shí)現(xiàn)了一種非對稱同步fifo,設(shè)計(jì)中充分利用了fpga 中的資源如時(shí)鐘延遲鎖相環(huán)(dll)和blockram。fpga 中的dll fpga 中的dll 是一種很好的資源,xilinx公司spartan ii、spartaniie、virtex-e等系列器件中就采用時(shí)鐘延遲鎖相環(huán)技術(shù)進(jìn)行fpga 內(nèi)部的時(shí)鐘控制,它可以對時(shí)鐘進(jìn)行倍頻、鎖相等操作。本設(shè)計(jì)中要利用spartan ii系列器件中的d l l 產(chǎn)生倍頻時(shí)鐘信號(hào),電路原理圖如圖1 所示。其中ibufg、ibuf、bufg、obuf 是時(shí)鐘緩沖器,提供時(shí)鐘信號(hào)的最小時(shí)延。f p g a 中的r a m xilinx 公司的fp
50、ga 器件提供了片內(nèi)ram 可供直接使用,而不必使用寄存器來構(gòu)成存儲(chǔ)空間,從而大大提高了芯片的利用率。根據(jù)型號(hào)的不同,fpga 中提供了兩種結(jié)構(gòu)的r a m :分布式r a m 和blockram。分布式ram 可以利用可配置邏輯模塊(clb) 設(shè)計(jì)實(shí)現(xiàn),主要用于小容量片內(nèi)存儲(chǔ);b l o c k r a m 是f p g a 內(nèi)部的專用ram 模塊,通常沿芯片宏模塊,就需要自己生成blockram 模塊,具有較高的靈活度。利用xilinx 公司的垂直邊排列。根據(jù)具體型號(hào)不同,fpga 內(nèi)部的blockram 在單位容量和總體容量上都有較大的不同。本設(shè)計(jì)將采用blockram 用于fifo 的
51、編寫。由于在xilinx公司spartan ii fpga器件庫中沒有現(xiàn)成的的配套軟件ise foundation 和isew e b p a c k 中都帶有的coregenerator 程序包,可以很方便地建立用戶所需的模塊。只需要輸入b l o c k r a m 模塊的名稱、blockram 的類型( 如單口還是雙口)、地址線和數(shù)據(jù)線的寬度,就可以生成用戶希望得到的結(jié)構(gòu)。一般來說,生成的結(jié)構(gòu)會(huì)自動(dòng)加載到當(dāng)前的項(xiàng)目中,從而可以像器件庫中的元件一樣調(diào)用。非對稱同步fifo的結(jié)構(gòu)下面以winwout(設(shè)win=8,wout=16)這種情形為例,介紹非對稱同步fifo 模塊的設(shè)計(jì)。非對稱同步f
52、ifo 的結(jié)構(gòu)框圖如圖2 所示,圖中還顯示了各模塊端口及信號(hào)互連關(guān)系。其主要設(shè)計(jì)特點(diǎn)為:由于寫數(shù)據(jù)與讀數(shù)據(jù)總線寬度不同,所以在設(shè)計(jì)雙口ram 時(shí)把雙口r a m 設(shè)計(jì)成寫口r a m 和讀口r a m 兩個(gè)部分。例如f i f o 寫口ram 部分為512 8,讀口ram 部分為256 16,這樣通過數(shù)據(jù)存儲(chǔ)格式的改變達(dá)到寫數(shù)據(jù)與讀數(shù)據(jù)總線寬度的轉(zhuǎn)換。(2) 由于讀數(shù)據(jù)時(shí)鐘頻率是寫數(shù)據(jù)時(shí)鐘頻率的兩倍,因此可利用fpga 中的dll 產(chǎn)生二倍頻時(shí)鐘信號(hào)來提高寫數(shù)據(jù)的時(shí)鐘頻率,使讀數(shù)據(jù)和寫數(shù)據(jù)的時(shí)鐘頻率相等。二倍頻時(shí)鐘信號(hào)提供給寫口ram、寫地址產(chǎn)生模塊,而源時(shí)鐘信號(hào)(一倍頻) 提供給讀口r a
53、m 、讀地址產(chǎn)生模塊及空/滿標(biāo)志產(chǎn)生模塊,從而解決了內(nèi)部數(shù)據(jù)處理同步的問題。(3) 由于雙口ram 中存在兩種數(shù)據(jù)存儲(chǔ)格式,因此地址位數(shù)不同,讀地址和寫地址不能一一對應(yīng),例如fifo 寫口ram 部分為512 8,讀口ram 部分為256 16,因此寫地址要求9 位,而讀地址要讀地址,寫地址的高8 位與讀地址的8 位相等,它們的區(qū)別僅在寫地址的最低一位。因此可把寫地址的高8位與讀地址一同輸入空/滿標(biāo)志產(chǎn)生模塊,從而得到正確的full 和empty 信號(hào)。下面僅給出讀寫地址產(chǎn)生邏輯及空/ 滿標(biāo)志產(chǎn)生邏輯的vhdl 設(shè)計(jì)程序:fifo_write : processbeginwait until
54、rising_edge(clk);if rst = 1 thenwr_addr = 0; /寫地址初始化elseif (wr_en = 1 and full = 0)thenwr_data_buf (wr_addr) =to_bitvector(wr_data (7 downto 0);/寫數(shù)據(jù),其中wr_data_buf定義為基于blockram 的存儲(chǔ)矩陣wr_addr = (wr_addr + 1) mod8;/ 寫地址增加1end if;end if;end process;fifo_read : processbeginwait until rising_edge(clk);if rst = 1 thenrd_addr = 0;/讀地址初始化elseif (rd_en = 1 and empty =0) thenrd_data (15 downto 0) =wr_data_buf (rd_addr);/讀數(shù)據(jù)rd_addr = (rd_addr - 1)mod 16;/ 讀地址減1end if;end if;end process;wr_addr1 = wr_addr / 2 ;/取寫地址的高8bitoffset rd_addr)else (m - (rd_a
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 無牙頜種植課件
- 承包廢棄大坑合同范例
- 廣州公寓出租合同范例
- 合同模板運(yùn)用方法
- 商業(yè)門店拆除合同范例
- 技術(shù)委外合同范例
- 房產(chǎn)兼職合同模板
- 安徽醫(yī)療設(shè)備搬運(yùn)合同模板
- 代理項(xiàng)目合同范例
- 安裝指紋鎖合同范例
- 解讀《公司法》課件
- 酒店住宿水單模板-皇冠假日
- 人教版語文必修1:雨巷-共44張課件
- 一片葉子落下來課件
- 意識(shí)形態(tài)教育培訓(xùn)
- 公安執(zhí)法規(guī)范化培訓(xùn)
- 小陰唇整形手術(shù)教學(xué)
- 4.3 積極踐行社會(huì)主義核心價(jià)值觀
- 2023年初級(jí)出版資格證考試:初級(jí)出版理論與實(shí)務(wù)歷年真題匯編(共476題)
- 中藥材種植專業(yè)合作社新版章程
- 2024新能源風(fēng)電機(jī)組無人機(jī)巡檢技術(shù)方案
評(píng)論
0/150
提交評(píng)論