日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

一種基于FPGA的無(wú)線局域網(wǎng)接入實(shí)現(xiàn)( 二 )


DLL分頻模塊:由于該系統(tǒng)的需要 , FPGA的工作時(shí)鐘不止一個(gè) , 有的由輸入提供 , 有的必須由本地晶振產(chǎn)生再經(jīng)FPGA分頻后得到 。同時(shí) , 隨MPDU一起輸出的6.25MHz時(shí)鐘也要由本地時(shí)鐘分頻得到 。盡量利用FPGA的DLL資源(Delay-Locked Loop)來(lái)分頻 , 這樣可以提高時(shí)鐘質(zhì)量 。
雙口RAM:發(fā)來(lái)的每一幀不一定能及時(shí)處理(有可能這一幀還沒(méi)處理完 , 后面又來(lái)了很多幀) , 而且接收和發(fā)送時(shí)鐘頻率還不一樣 。雙口RAM就是起到數(shù)據(jù)緩存的作用 。這里收發(fā)兩個(gè)雙口RAM都是4bit 16K , 即每個(gè)存儲(chǔ)單元為4bit , 存儲(chǔ)深度是16K 。每個(gè)RAM都是單向的 , 一端只負(fù)責(zé)收 , 另一端只負(fù)責(zé)發(fā) , 收發(fā)時(shí)鐘獨(dú)立 。實(shí)現(xiàn)上Xilinx ISE開發(fā)工具提供了RAM的IP Core , 使用的是FPGA內(nèi)的Block RAM資源 。
Length存儲(chǔ)器:每一幀的數(shù)據(jù)長(zhǎng)度不是一定的 , 而是有一個(gè)范圍 , 所以要用一個(gè)存儲(chǔ)器把雙口RAM里每一幀的長(zhǎng)度(這里指Nibble數(shù) , 每4bit稱為一個(gè)Nibble)都存起來(lái) 。這樣一方面在讀數(shù)時(shí)能與讀計(jì)數(shù)器有個(gè)比較 , 知道什么時(shí)候這一幀讀完了;另一方面也是MPUD幀格式本身的需要 , MPDU幀頭部分要加上12bit Length來(lái)表示幀長(zhǎng) 。
寫控制狀態(tài)機(jī):寫控制狀態(tài)機(jī)由4個(gè)狀態(tài)組成 , 分別為空閑狀態(tài)(Idle)、判決狀態(tài)(Decision)、寫狀態(tài)(Write)、結(jié)束狀態(tài)(End) 。
Idle狀態(tài):把所有計(jì)數(shù)器、寄存器清零 , 等待著數(shù)據(jù)幀的到來(lái) 。
Decision狀態(tài):假如數(shù)據(jù)使能信號(hào)出現(xiàn)高電平 , 就跳到該狀態(tài) , 完成的功能就是根據(jù)幀頭的Preamble來(lái)決定這一幀是接收還是丟棄 。Preamble由15個(gè)1010和一個(gè)1011組成 , 假如連續(xù)收到8個(gè)或8個(gè)以上1010 , 然后再收到一個(gè)1011 , 那么就可以認(rèn)為這一幀有效 , 否則就認(rèn)為這一幀已經(jīng)出現(xiàn)了嚴(yán)重的誤碼 , 或是使能信號(hào)置高是由于外界干擾而出現(xiàn)的假象 , 所以將這一幀丟棄 , 重新回到Idle狀態(tài) 。
Write狀態(tài):在該狀態(tài)下主要完成3件事 。將數(shù)據(jù)并行寫入雙口RAM;啟動(dòng)Write計(jì)數(shù)器 , 記錄這一幀共有多少Nibble;然后把Write計(jì)數(shù)器的值存入Length存儲(chǔ)器 。
End狀態(tài):這個(gè)狀態(tài)一方面完成全部使能信號(hào)的歸零 , 另一方面假如由于前面的處理使得數(shù)據(jù)和使能信號(hào)發(fā)生了錯(cuò)位 , 在這個(gè)狀態(tài)就可以調(diào)整 。
讀控制狀態(tài)機(jī):根據(jù)需要 , 筆者設(shè)計(jì)的讀控制狀態(tài)機(jī)分別由搜索狀態(tài)(Search)、Length發(fā)送狀態(tài)(Tran_Length)、讀狀態(tài)(Read)、結(jié)束狀態(tài)(End)4個(gè)狀態(tài)組成 。圖5給出了狀態(tài)轉(zhuǎn)移圖 。
Search狀態(tài):每15個(gè)時(shí)鐘周期就檢測(cè)一下雙口RAM中有沒(méi)有完整的幀 。之所以要15個(gè)時(shí)鐘周期才檢測(cè)一次 , 而不時(shí)時(shí)刻刻都在檢測(cè) , 是因?yàn)楣P者要求每個(gè)MPDU之間的間隔至少為15個(gè)時(shí)鐘周期 。假如有一個(gè)或一個(gè)以上完整的幀 , 而且基帶部分已經(jīng)預(yù)備好 , 那么就跳到下一個(gè)狀態(tài) 。
Tran_Length狀態(tài):這個(gè)狀態(tài)下 , 12位寄存器里的值(表示的是該幀的Nibble數(shù))轉(zhuǎn)換成Byte數(shù) , 再串行移位發(fā)送出去 。
Read狀態(tài):這里開辟了一個(gè)控制計(jì)數(shù)器 , 從00到11以4個(gè)時(shí)鐘為周期循環(huán)計(jì)數(shù) , 每個(gè)周期內(nèi)都把雙口RAM里的一個(gè)Nibble裝載到4位寄存器內(nèi) , 然后再串行移位輸出 , 這樣就完成了數(shù)據(jù)的并/串轉(zhuǎn)換 。同時(shí)啟動(dòng)Read計(jì)數(shù)器 , 計(jì)數(shù)的值與12位寄存器里的值比較 , 假如相等說(shuō)明該幀已經(jīng)發(fā)送完畢了 , 就停止讀數(shù) 。
End狀態(tài):跟寫數(shù)時(shí)一樣 , 這個(gè)狀態(tài)主要完成使能信號(hào)歸零和錯(cuò)位調(diào)整 。
幀計(jì)數(shù)器:用來(lái)記錄雙口RAM里完整的幀的數(shù)量 , 只有當(dāng)它的值大于或等于1時(shí)才能讀數(shù) , 這樣才不至于讀空 。接收模塊
接收是發(fā)送的逆過(guò)程 , 在實(shí)現(xiàn)上與發(fā)送模塊有很大的相似性 , 本文不再贅述 。

推薦閱讀